gpt4 book ai didi

c++ - 包含 '\0' 的字符串文字 - 为什么它们不一样?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:06 24 4
gpt4 key购买 nike

所以我做了以下测试:

char* a = "test";
char* b = "test";
char* c = "test\0";

现在是问题:

1) 是否保证a==b我知道我在比较地址。这不是要比较字符串,而是要比较相同的字符串文字是否存储在单个内存位置

2) 为什么 a==c 没有?编译器难道不能看到它们指的是同一个字符串吗?

3) 是否在 c 的末尾追加了一个额外的 \0,即使它已经包含一个?

我不想为此问 3 个不同的问题,因为它们看起来有些相关,抱歉。

注意:标签是正确的,我对C++很感兴趣。 (尽管请指定 C 的行为是否不同)

最佳答案

Is it guaranteed that a==b?

没有。但它是 §2.14.5/12 允许的:

Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementation-defined. The effect of attempting to modify a string literal is undefined.

正如您从最后一句话中看到的,使用 char* 而不是 char const* 会带来麻烦(您的编译器应该拒绝它;确保您已启用警告并选择了高一致性级别)。

Why doesn't a==c? Shouldn't the compiler be able to see that they're referring to the same string?

不,他们不需要引用相同的字符数组。一个有五个元素,另一个有六个。实现可以将两者存储在重叠存储中,但这不是必需的。

Is an extra \0 appended at the end of c, even though it already contains one?

是的。

关于c++ - 包含 '\0' 的字符串文字 - 为什么它们不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742335/

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