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

时间:2018-03-21 10:06:06

标签: c string strcmp

我正在尝试使用以下代码比较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设为负值。我不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

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

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