gpt4 book ai didi

c - 可以覆盖声明的 : char * a = "abc";?

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:48 25 4
gpt4 key购买 nike

建议如果这样声明一个缓冲区:

char * a = "one";

它不应该被再次覆盖。

a = "two";
a = "three";
a = "ab";

为什么这是一件坏事?

因为这似乎被大多数人所接受。

char * a = "";
a = "abc";

如果可以的话。为什么上面的例子不行?

最佳答案

分配 a 以指向一个不同的 字符串文字不是问题;你写的很好。

尝试覆盖a 指向 的字符串字面量是不对的。 IOW,给定线

char * a = "abc";

以下任何情况都会导致未定义的行为,这意味着您的代码可能会崩溃,或者它可能会工作,或者它可能会破坏其他数据:

a[0] = 'A';
strcpy( a, "foo" );
*a = *a + 1;

如果您知道a 只会指向一个字符串文字,最好将它声明为const:

const char * a = "abc";

您仍然可以分配 a 以指向不同的字符串文字:

a = "foo";
a = "bar";

但是如果您尝试修改a 指向的内容,编译器就会对您大喊大叫。

关于c - 可以覆盖声明的 : char * a = "abc";?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45109615/

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