尝试打印数字字符串中的最后一个元素

Trying to print the last element in string of numbers

我在 C 中有这段代码,我将在其中输入一串由空格分隔的数字,然后用 strsep 拆分它。如果我输入一个像 "1 2" 这样的字符串,并设置 strcmp 来查找最后一个元素之前的数字,代码就可以工作,但是如果我设置 strcmp 来查找最后一个元素,代码失败。你能提出任何修复建议吗?

char *string = malloc(1028), *found;
  if (fgets(string, 1028, stdin) != NULL) {
    while ((found = strsep(&string, " ")) != NULL) {
      if (strcmp(found, "2") == 0) {
        printf("%s\n", found);
      }
    }
  }

因为found指向的最后一个元素包含换行符。因此,您要么必须像这样将新行添加到 strcmpstrcmp(found, "2\n")(假设 2 是您的最后一个元素),要么当您调用 strsep 时,您需要对 space 和换行符:strsep(&string, " \n").

完整的解决方案:

char *string = malloc(1028);
if (string) {
  if (fgets(string, 1028, stdin) != NULL) {
    char *p = string, *found = string;
    while ((found = strsep(&p, " \n")) != NULL) {
      if (strcmp(found, "1") == 0) {
        printf("%s\n", found);
      }
    }
  }
  free(string);
}

需要注意的几点:string 指针由 strsep 函数修改,因此我更新了代码以使用中间变量 p。我还更新了代码以验证分配是否成功,然后在最后释放它。根据您的系统要求,您可以考虑放弃堆并在堆栈上分配 string