我正在尝试使用以下代码比较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]);
我认为a
和b[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
设为负值。我不知道为什么会这样。
答案 0 :(得分:2)
这是未定义的行为,因为a
未终止。 C中的所有字符串都必须以空终止才能在strcmp
中使用。 strcmp
所做的是循环遍历这两个字符串,直到两者中的任何一个为NULL终止(请参阅Implementation of strcmp以了解它是如何工作的)。
您可以看到,如果'\0'
在您遇到问题的任何地方都不存在。