C字符串空终止字符\ 0修改
问题描述:
C字符串末尾的空字符是否始终为常量并且无法修改?意思是,程序员可以修改C字符串末尾的空字符/ 0吗?或者它是不变的,不能被删除。例如:'Steak'在cstring中,它在位置5有\ 0。当'steak'被修改时,我们可以完全删除\ 0吗?C字符串空终止字符 0修改
答
C字符串末尾的空字符是否始终为常量并且无法修改?
的情况下,没有我们所谈论的字符数组(静态或动态),但是如果你的意思是一个常量字符串文字,如:
const char* str = "steak";
可以C字符串末尾的空字符/ 0会被程序员修改?
是只要不是只读内存。
我们可以完全删除\ 0吗?
是的。不过,如果你使用这个字符串与预期'\0'
的一个功能,行为是未定义
答
如果C-string是的std::string
的c_str()
或data()
成员函数,那么标准禁止返回值尾随0
元素的修改。当然,仅仅因为标准禁止它并不意味着C++或其运行时环境中的任何内容都会警告你违规。您很可能会编写试图修改尾随0
的代码,并且它会执行而不会引发任何警报。然而,事情很可能会以不可预知的奇怪方式出错。
所以不要这样做。
这只是一个存储中的角色。它可以像任何其他角色一样进行修改(在你的危险中)。但重要的是要在那里标记标准C字符串的结尾,否则字符串的长度将不得不分别传递给字符串函数。 –
这个问题本身是无效的。 C字符串是一个零终止的字符串。如果你删除0,那么它不再是一个C字符串,你不再可以将它用于标准字符串函数。如果您有使用帕斯卡的经验:类比将是“可以从帕斯卡字符串中删除长度吗?” - 与这里给出的答案几乎相同。 – usr2564301