gpt4 book ai didi

c - strcmp 仅在循环开始时起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:15 25 4
gpt4 key购买 nike

我一直在尝试创建一个简单的程序来循环遍历数组的成员并扫描字符以查找一组特定的字符。我遇到了 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] !

最佳答案

strcmp 函数需要一个空终止字符串的地址。相反,您将 char 的地址传递给它。 strcmp 然后尝试读取超过 character 的内存位置,导致 undefined behavior .

然而,真正的问题是您不想比较字符串。您想比较字符。

if (character == '!') {

关于c - strcmp 仅在循环开始时起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com