c - 在 C 中重新初始化 const char 数组不会给出错误

标签 c arrays string initialization constants

在初始化 const char 数组时,我尝试更改字符串,并且能够毫无问题地更改它。

我正在学习如何初始化 const char 数组。 我想我在这里犯了一些我无法找到的错误。

int main(int argc, char const *argv[])
{

    const char *strs[10];
    strs[0] = "wwww.google.com";
    printf("%s\n", strs[0]);
    strs[1] = "https://wwww.google.com";
    strs[0] = "ss";
    printf("%s\n", strs[0]);
    return 0;
}

输出:

1st init: wwww.google.com
2nd init: ss -> Here, I expect it to throw error

最佳答案

const char* s = "Hi";

告诉编译器指针指向的内容是常量。这意味着 s[0] = 'P'; 将导致编译错误。但您可以修改指针。另一方面,

char* const s = "Hi";

告诉编译器该指针是常量。这意味着 s = "Pi"; 将导致编译错误。但是当你尝试修改字符串*

时不会抛出编译错误

您的代码描述了前一种行为,而不是您认为的后者

<小时/>

* 修改字符串文字将调用未定义行为

关于c - 在 C 中重新初始化 const char 数组不会给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025418/

相关文章:

c - 为什么指向 char 数组的指针在右值之间不同是 &"hello"和 char 数组?

c++ - 字符串操作 C++

c - 将结构分配给静态数组

c - undo qsort 返回原始数据

python - 查找二维数组中最高元素的列表 : Python 3

arrays - 如何编写一个方法来查找范围数组中的所有交集?

c - 如何在 C 中的 scanf() 函数中使用无限类型说明符?

c - 欧拉计划 4 - 5 位回文数

java - ArrayList 和 Array 在 JSON 中的表示方式是否不同?

javascript - 带有空字段的 HTML 表