在C中重新初始化const char数组没有给出错误

时间:2019-07-14 07:30:43

标签: c arrays string initialization const

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

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

class Results:
    res = 0

clas= Results()
setattr(clas, 'res', 3+2*4)
print(clas.res)

输出:

  

第一次初始化:wwww.google.com
  第二个初始化:ss->在这里,我希望它会引发错误

3 个答案:

答案 0 :(得分:3)

const char* s = "Hi";

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

char* const s = "Hi";

告诉编译器指针是恒定的。这意味着s = "Pi";将导致编译错误。但是,当您尝试修改字符串 *

时,不会引发任何编译错误。

您的代码描述的是前者的行为,而不是您似乎想的那样的行为


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

答案 1 :(得分:2)

const char *strs[10];

strs是10个指向const char的指针的数组。您可以更改指针;你不能改变字符

strs[2] = NULL; // ok: change the pointer
strs[0][0] = '#'; // wrong; cannot change the char

也许尝试

const char * const strs[10] = {"www.google.com",
                               "https://www.google.com",
                               "www.google.com/",
                               "https://www.google.com/",
                               NULL, NULL };

这使strs组成10个指向const char只读指针的数组。初始化后不能更改指针。

答案 2 :(得分:0)

要用简单的英语(不一定100%准确,但可以概念化),这

const char *strs[10];

初始化一个不包含常量元素的连续数组 strs 。因此,可以更改数组中的元素,但不能更改数组本身