gpt4 book ai didi

C strcmp - 比较由 char 和 char* 声明的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:08 24 4
gpt4 key购买 nike

我正在尝试使用以下代码比较 2 个字符串:

char a[100] = "\0";
char* b[10];
for (int i = 0; i < 10; i++)
b[i] = "";
b[0] = "xy";
a[0] = 'x';
a[1] = 'y';
int c = strcmp(a, b[0]);

我认为 ab[0] 都包含字符串 "xy",所以我期望 int c 等于 0。但是 int c 中存储的结果是 -858993460。为什么会这样?我应该怎么做才能避免这个错误?非常感谢。

更新:我发现我的电脑出现了一些错误...

char a[3] = { NULL };
char d[3] = { NULL };
a[0] = 'x';
a[1] = 'y';
a[2] = '\0';

d[0] = 'x';
d[1] = 'y';
d[2] = '\0';
int c = strcmp(a, d);

即使使用这段代码,我也得到了 int c 为负值。我不知道为什么会这样。

最佳答案

这是未定义的行为,因为 a 不是空终止的。 C 中的所有字符串都必须以 null 结尾才能在 strcmp 中使用。 strcmp 所做的是遍历这两个字符串,直到其中一个以 NULL 终止(请参阅 Implementation of strcmp 以了解其工作原理)。您可以看到,如果 '\0' 不在任何地方,您就会遇到问题。

阅读Why do strings in C need to be null terminated?了解更多信息:

关于C strcmp - 比较由 char 和 char* 声明的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403360/

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