C字符串null终止字符\ 0修改

时间:2013-10-05 23:41:45

标签: c++ string c-strings

C字符串末尾的空字符是否始终是常量且无法修改?意思是,程序员可以修改C字符串末尾的空字符/ 0吗?或者它是不变的,不能被删除。示例:'Steak'位于cstring中,位置5处为\ 0。当'牛排'被修改时,我们可以完全删除\ 0吗?

2 个答案:

答案 0 :(得分:2)

  

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

以防我们讨论字符数组(静态或动态),但如果您指的是常量字符串文字,例如:

const char* str = "steak";
  

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

只要内存不是只读的。

  

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

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

答案 1 :(得分:0)

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

所以不要这样做。