gpt4 book ai didi

c - 字符串文字的修改能保证在 C 中起作用吗?

转载 作者:行者123 更新时间:2023-11-30 19:54:33 25 4
gpt4 key购买 nike

考虑以下代码:

int main() {
char *p = "abcd";
p[0] = 'x';
return 0;
}

标准是否保证可以在任何环境下工作?

我担心某些编译器决定将存储字符串的内存标记为只读,并尝试修改它会在运行时生成段错误。然而,在我测试的所有环境中,它都有效。

最佳答案

标准确认对字符串文字的任何修改都可能导致未定义的行为。

C11-§6.7.9/32

[...] The contents of the arrays are modifiable. On the other hand, the declaration

  char *p = "abc";

defines p with type "pointer to char" and initializes it to point to an object with type "array of char" with length 4 whose elements are initialized with a character string literal. If an attempt is made to use p to modify the contents of the array, the behavior is undefined.

请注意,当调用未定义的行为时,您可能会得到预期或意外的结果。在这种情况下,不能保证您总是会出现段错误或程序崩溃。

建议阅读:comp.lang.c FAQ list · Question 8.5

关于c - 字符串文字的修改能保证在 C 中起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34581180/

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