Ede*_*nia 2 c arrays string pointers
好吧,我以为我知道关于指针和内存操作的一切,但有一点让我好奇.strcmp到目前为止,我一直在比较字符串,但..
这个表达是正确的:
#include <stdio.h>
int main()
{
char* str1 = "I love StackOverflow"; // dram memory alocated
char* str2 = "I love StackOverflow";
if(str1 == str2) printf("%s and %s are equal", str1, str2);
else printf("%s and %s are not equal", str1, str2);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
哪个应该在str1和str2的每个内存块之间进行比较?在这种情况下..如果我们使用:
char str1[] = "I love StackOverflow"; // saving them on stack
char str2[] = "I love StackOverflow";
Run Code Online (Sandbox Code Playgroud)
相反,它不会输出它们是相等的.为什么?
在第一个例子中,绝对不能保证两个指针是相等的.它是由编译器利用字符串文字在C中不可变的事实执行的优化.
C99理由文件说:
"此规范允许实现共享具有相同文本的字符串副本,将字符串文字放在只读内存中,并执行某些优化"
您不应该依赖于此,如果您想比较字符串,请在第一个或第二个代码段中使用strcmp/ strncmpfunctions.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |