[英]C strcmp - compare strings declared by char and char*
我正在尝试使用以下代码比较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
设为负值。 我不知道为什么会这样。
这是未定义的行为,因为a
不为空终止。 C中的所有字符串必须为null终止才能在strcmp
。 strcmp
作用是循环这两个字符串,直到两个字符串之一以NULL终止(请参阅strcmp的实现以了解其工作原理)。 您可以看到,如果在任何地方都没有出现'\\0'
,那么您会遇到问题。
阅读为什么C中的字符串需要以null终止? 有关更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.