gpt4 book ai didi

c - 关于字符串比较 char* 和数组字符串的区别的解释

转载 作者:行者123 更新时间:2023-12-05 09:22:52 28 4
gpt4 key购买 nike

好吧,我以为我知道关于指针和内存操作的一切,但有一件事让我感到好奇。到目前为止,我一直只将字符串与 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;
}

str1 和str2 的每个内存块应该由哪个进行比较?在这种情况下..如果我们使用:

char str1[] = "I love StackOverflow"; // saving them on stack
char str2[] = "I love StackOverflow";

相反,它不会输出它们相等。为什么?

最佳答案

在第一个示例中,绝对不能保证两个指针相等。这是编译器利用字符串文字在 C 语言中不可变这一事实执行的优化。

C99 基本原理文档说:

"This specification allows implementations to share copies of strings with identical text, to place string literals in read-only memory, and to perform certain optimizations"

你不应该依赖这个,如果你想比较字符串,无论是在你的第一个或第二个代码片段中,使用 strcmp/strncmp 函数。

关于c - 关于字符串比较 char* 和数组字符串的区别的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24476167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com