C语言直接用==比较字符串输出unequal,请问原因是什么?(附代码)
为什么用
==比较两个内容相同的C字符串会输出"unequal"? 嘿,这个问题我见过好多刚学C的朋友踩坑!咱们先把你的问题掰扯清楚~
你写的代码里,用str1 == str2来判断两个字符串是否相等,但在C语言里,数组名本质上是指向数组首元素的指针。虽然str1和str2存的内容都是"hello",但它们是两个完全独立的字符数组,会被分配到内存里不同的位置。所以str1和str2其实是两个不同的内存地址,==比较的是这两个地址,而不是数组里的实际内容,自然会返回false,输出"unequal"。
正确的字符串内容比较方法
要对比C字符串的内容,得用标准库的strcmp()函数——它会逐字符对比两个字符串的每一位,返回值为0时表示两个字符串完全相等。记得要包含<string.h>头文件才行,修改后的代码如下:
#include <stdio.h> #include <string.h> // 必须包含这个头文件才能用strcmp int main() { char str1[] = "hello"; char str2[] = "hello"; if (strcmp(str1, str2) == 0) // strcmp返回0代表内容相等 printf("equal"); else printf("unequal"); return 0; }
额外提个小知识点
如果你的代码写成char *str1 = "hello"; char *str2 = "hello";,有时候用==会返回true——这是因为编译器会把相同的字符串常量放到同一个内存区域(字符串池),让两个指针指向同一个地址。但这种行为是编译器优化的结果,绝对不能依赖,不同编译器或编译选项可能有不同表现,所以不管什么时候,比较字符串内容都要用strcmp()才是稳妥的做法。
内容的提问来源于stack exchange,提问作者Kalapala Teja
相关产品推荐
相关产品推荐

