【发布时间】:2016-09-20 21:09:15
【问题描述】:
我一直在尝试创建一个简单的程序,该程序循环遍历数组的成员并扫描字符以查找特定的字符。我遇到了strcmp() 仅在循环开始时起作用的问题。我很难理解为什么会发生这种情况,我们将不胜感激。
char *file[3] = {"!x", "!!x", "x!"};
for (int i = 0; i < sizeof(file) / sizeof(file[0]); i++) {
char *line = file[i];
printf("\n");
for (int i = 0; i < strlen(line); i = i + 1) {
char character = line[i];
if (strcmp("!", &character) == 0) {
printf("[YES] %c\n", character);
} else {
printf("[NO] %c\n", character);
}
}
}
输出
[YES] ! [NO] x [YES] ! [NO] ! [NO] x [NO] x [NO] !
【问题讨论】:
-
为什么要使用字符串比较函数来比较单个字符?
-
你可能有未定义的行为:没有什么能保证 char 上的指针在附近某处为零,因为它不是字符串。
-
这里关于需要空终止字符串的 cmets 当然是正确的。这种行为看起来仍然很奇怪,因为在这种情况下,我们知道
&character之后的内容,因为我们知道字符串中的其余字符。我不清楚为什么它会以这种特定方式行为不端。
标签: c arrays string char strcmp