C字符串末尾的空字符是否始终是常量且无法修改?意思是,程序员可以修改C字符串末尾的空字符/ 0吗?或者它是不变的,不能被删除。示例:'Steak'位于cstring中,位置5处为\ 0。当'牛排'被修改时,我们可以完全删除\ 0吗?
答案 0 :(得分:2)
C字符串末尾的空字符是否始终是常量且无法修改?
否以防我们讨论字符数组(静态或动态),但是如果您指的是常量字符串文字,例如:
const char* str = "steak";
可以由程序员修改C字符串末尾的空字符/ 0吗?
是只要内存不是只读的。
我们可以完全删除\ 0吗?
是。但是如果您将此字符串与期望'\0'
的函数一起使用,则行为未定义
答案 1 :(得分:0)
如果C字符串是c_str()
的{{1}}或data()
成员函数的返回值,则标准禁止修改尾随std::string
元素。当然,仅仅因为标准禁止它并不意味着C ++或其运行时环境中的任何内容都会警告您违规。很可能您可以编写试图修改尾随0
的代码,并且它将在不引发任何警报的情况下执行。然而,事情也很可能以不可预测的奇怪方式出错。
所以不要这样做。