C/C++字符串相等

来源:互联网 发布:大数据与医疗 编辑:程序博客网 时间:2024/06/04 19:02
#include <stdio.h>int main() {    char str[20] = "a";    printf("%d\n", "a"=="a");    printf("%d\n", str=="a");    printf("%d\n", strcmp(str, "a"));    return 0;}

使用GNU GCC编译上面的代码,运行,输出

1

0

0

这说明,GNU GCC在处理字符串常量时是有优化的,相当于使用了常量池(同Java,C++等),对相同的字符串常量不再进行第二次分配,因此他们具有相同的地址。但在有些编译器下却没有这样的优化。可能这是一个未定义的行为,因此还是避免使用吧。要更深刻地认识这个问题就需要研究C语言编译器的原理以及运行时内存分配模型了。

还有一点是strcmp在字符串相等时是返回0而不是1...