C 字符串空终止字符 0 修改

C-strings null terminating character modification

本文关键字:修改 字符 终止 字符串      更新时间:2023-10-16

C字符串末尾的空字符是否始终恒定且无法修改?这意味着,程序员可以修改 C 字符串末尾的空字符/0 吗?或者它是恒定的,无法删除。示例:"牛排"在一串中,它在位置 5 处有 \0。当"牛排"被修改时,我们可以完全删除\0吗?

C 字符串末尾的空字符是否始终恒定且无法修改?

不,如果我们谈论的是字符数组(静态或动态),但是如果您的意思是常量字符串文字,例如:

const char* str = "steak";

程序员可以修改 C 字符串末尾的空字符/0 吗?

的,只要内存不是只读的。

我们可以完全删除\0吗?

是的。但是,如果您将此字符串与期望''的函数一起使用,则行为是未定义的

如果 C 字符串是 std::stringc_str()data()成员函数的返回值,则标准禁止修改尾随的 0 元素。当然,仅仅因为标准禁止,并不意味着C++或其运行时环境中的任何内容都会警告您违规。很有可能你可以编写代码来尝试修改尾随0,并且它将在不发出任何警报的情况下执行。然而,事情也很可能会以不可预测的奇怪方式出错。

所以不要这样做。