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

问题描述:

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

+0

这只是一个存储中的角色。它可以像任何其他角色一样进行修改(在你的危险中)。但重要的是要在那里标记标准C字符串的结尾,否则字符串的长度将不得不分别传递给字符串函数。 –

+1

这个问题本身是无效的。 C字符串是一个零终止的字符串。如果你删除0,那么它不再是一个C字符串,你不再可以将它用于标准字符串函数。如果您有使用帕斯卡的经验:类比将是“可以从帕斯卡字符串中删除长度吗?” - 与这里给出的答案几乎相同。 – usr2564301

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

的情况下,没有我们所谈论的字符数组(静态或动态),但如果你的意思是一个常量字符串文字,如:

const char* str = "steak"; 

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

只要不是只读内存。

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

是的。不过,如果你使用这个字符串与预期'\0'的一个功能,行为是未定义

+3

可能值得注意的是,由于字符串C字符串是不变的,所以它们不能被修改。但是,当字符串被动态分配时,你当然是正确的。 – icktoofay

+2

换句话说,仅仅因为你*可以*并不意味着你*应该*。 – syam

+0

@syam:这很好:) – LihO

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

所以不要这样做。