【发布时间】:2021-01-27 10:15:48
【问题描述】:
我在 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);
}
}
}
【问题讨论】:
-
请提供失败案例的minimal verifiable example。您是说如果在
strcmp中使用"2",它不会按预期工作吗?如果是这种情况,则显示该代码而不是有效的代码。请注意,MVE 是完整的代码,可以完全按照所示运行以重现问题。 -
那是因为你的最后一个元素是
"2\n"而不是"2"。在strcmp()之前使用found[strcspn (found, "\n")] = 0;。 -
一个可能的问题是字符串末尾实际上有一个换行符。
标签: c printf strtok strcmp strsep