在 C 中创建常量字符串的好方法是什么?无法通过对其索引位置之一进行字符分配来改变的字符串。以及在初始化后的后续执行中不能被另一个字符串替换的字符串。
我在下面的代码中尝试了 char* 和 char[] 。我尝试了使用和不使用“const”关键字的方法。结果非常离奇。
以下是我的代码:
#include <stdio.h>
main() {
char a []= "abc" "def";
char* b = "abcdef";
const char c [] = "abcdef";
const char* d = "abcdef";
a[1] = 'y';
b[1] = 'y';
c[1] = 'y';
d[1] = 'y';
printf("%s %s %s %s \n", a, b, c, d);
a = "overwrited";
b = "overwrited";
c = "overwrited";
d = "overwrited";
printf("%s %s %s %s \n", a, b, c, d);
}
结果是在第一个printf中,所有a、b、c、d都可以变异;但是 c 和 d 出现“分配只读位置”的警告。在第二个 printf 中,a 和 c 都返回错误。但是 b 和 d 被另一个字符串平滑地替换并被“覆盖”。
我对这个结果感到非常困惑,“const”关键字似乎对进行字符串赋值没有影响;但它对索引字符突变有影响。并且 char[] 和 char* 也表现出不同的行为。有人可以向我解释这背后的机制吗?