C - "char var []"和"char*var"之间的区别?

psi*_*lia 16 c arrays string pointers

我期待以下两个向量在RAM中具有相同的表示:

char a_var[] = "XXX\x00";
char *p_var  = "XXX";
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,f(char argument[])如果我调用它,对类型库函数的调用会破坏正在运行的应用程序f(p_var).但使用还f(a_var)可以!

为什么?

小智 28

第一个创建包含字符串的char数组.可以修改数组的内容.第二个创建一个指向字符串文字的字符指针.字符串文字无法修改.

  • 你知道错了.该标准禁止修改字符串文字. (15认同)
  • @psihodelia:修改字符串文字会调用UB(未定义的行为). (4认同)
  • 我无权访问C标准,但C++标准声明(2.13.4.2)"尝试修改字符串文字的效果未定义." (4认同)
  • @Andreas:C标准也是如此.阅读6.4.5节:) (2认同)