And*_*ech 4 c arrays string-comparison
我知道在C中比较"字符串"的正确方法是使用strcmp,但现在我尝试将一些字符数组与==运算符进行比较,并得到一些奇怪的结果.
看看下面的代码:
int main()
{
char *s1 = "Andreas";
char *s2 = "Andreas";
char s3[] = "Andreas";
char s4[] = "Andreas";
char *s5 = "Hello";
printf("%d\n", s1 == s2); //1
printf("%d\n", s3 == s4); //0
printf("%d\n", s1 == s5); //0
}
Run Code Online (Sandbox Code Playgroud)
第一个printf正确打印a 1,表示它们不相等.但有人可以向我解释为什么,在比较字符数组时,==返回的是0?
有人可以向我解释为什么第一个printf返回a 1(即,它们相等)并且字符数组返回一个0?
Mar*_*ett 20
==正在比较内存地址.
您的编译器可能正在使s1和s2指向相同的静态数据以节省空间.
即.前两行代码中的"Andreas"存储在您的可执行数据中.C标准说这些字符串是常量的,因此将两个指针指向同一存储器.
char []行通过将数据复制到变量中来创建变量,因此在执行期间存储在堆栈上的不同地址.
| 归档时间: |
|
| 查看次数: |
7347 次 |
| 最近记录: |