我一直在试图创建一个简单的程序,循环遍历数组的成员,并扫描字符寻找一组特定的字符。我遇到了一个问题,strcmp()
仅在循环开始时起作用。我很难理解为什么发生这种情况,任何帮助将不胜感激。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] !
为什么使用**字符串**比较函数来比较单**字符**? – Olaf
你可能有未定义的行为:没有什么能保证char上的指针在某处附近有一个零,因为它不是一个字符串。 –
这里关于一个空终止字符串的评论当然是正确的。这种行为仍然看起来很奇怪,因为在这种情况下,我们知道'&character'后面是什么,因为我们知道字符串中其余的字符。我不清楚为什么它以这种特定的方式行事不端。 – Brick