当前位置:  开发笔记 > 编程语言 > 正文

字符串文字的修改是否保证在C中有效?

如何解决《字符串文字的修改是否保证在C中有效?》经验,为你挑选了1个好方法。

请考虑以下代码:

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

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

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



1> haccks..:

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

C11-§6.7.9/ 32

[...]数组的内容是可修改的.另一方面,声明

  char *p = "abc";

p使用"指向char"的类型定义并将其初始化为指向类型为"array of char"且长度为4 的对象,其元素使用字符串文字初始化.如果尝试使用p修改数组的内容,则行为未定义.

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

建议阅读:comp.lang.c常见问题列表·问题8.5

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有