C等于常量字符串

以下比较是否保证是真的

"hello world"=="hello world"; 

此外,以下始终保证是假的吗?

 char a[] = "hello world"; a == "hello world"; 

要清楚 – 在这两种情况下,您都在比较指针,而不是实际的字符串内容。

对于

 "hello world"=="hello world"; 

允许比较是true false 。 C标准在6.4.5“字符串文字”中说:

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的。

因此,该标准允许文字的存储相同或不同。

对于

 char a[] = "hello world"; a == "hello world"; 

比较将始终为false因为数组a的地址必须不同于字符串文字的地址。

在C中你必须使用一个比较字符串的函数。 直线走动只会告诉你两个字符串是否在内存中的相同位置。 所以

 char a[] = "hello world"; char b[] = a; 

制作

 a == b; 

会给你真实的,因为a和b都指向内存中相同的位置或字符串。

如果你想比较两个字符串,你必须使用strcmp() ,如果字符串相等则返回0。

 if( strcmp(a, b) == 0 ) printf("True\n"); else printf("False\n"); 

要使用它,您需要包含库string.h。

 #include  

C中的==运算符可用于比较原始数据类型。 由于String在C中不是原始的,因此不能使用==来比较它们。 最好的选择是通过包含string.h库来使用strcmp()函数。

不允许通过C中的==运算符比较字符串内容。您应该使用

 strcmp(str1,str2); 

在这种情况下,您正在比较指针。 所以

 "hello world" == "hello world"; 

可能是也可能不是。

但第二种情况总是假的。

 char a[] = "hello world"; a == "hello world";