字符串操作问题
在上面的程序中(在 C++ Primer, Third Edition By Stanley B. Lippman, Josée Lajoie Exercise 3.14 中给出)字符指针的长度是 len+1
char *pc2 = new char[ len + 1];
http://www.ideone.com/pGa6c 但是,在这个程序中,我所取的字符指针的长度是 len
char *pc2 = new char[ len ];
为什么在得到相同结果的情况下,需要将新字符串的长度增加1?请解释。
请注意,我在这里展示的程序略有改动。和书上的不完全一样。
最佳答案
要在 C 中存储长度为 n 的字符串,需要 n+1 个 char
。这是因为 C 中的字符串只是一个 char
数组,以空字符 \0
结尾。因此,存储字符串“hello”的内存看起来像
'h' 'e' 'l' 'l' 'o' '\0'
并且由 6 个 char
组成,即使单词 hello 只有 5 个字母长。
您看到的不一致可能是语义上的;有些人会说 hello 这个词的长度是 len = 5,所以我们需要分配 len+1
char
,而有些人会说因为 hello 需要 6 char
s 我们应该说它的长度(作为 C 字符串)是 len=6
。
请注意,顺便说一句,C 存储字符串的方式并不是唯一可能的方式。例如,可以将字符串存储为整数(给出字符串的长度)后跟字符。 (我相信这就是 Pascal 所做的?)。如果不使用这样的长度字段,则需要另一种方法来了解字符串何时停止。 C 方式是字符串在到达空字符时停止。
要了解其工作原理,您可能需要尝试以下操作:
char* string = "hello, world!";
printf("%s\n", string);
char* string2 = "hello\0, world!";
printf("%s\n", string2);
(赋值 char* string = "foo";
只是创建一个包含 4 个元素的数组的简写方式,第一个元素的值为 'f',第二个元素的值为 'o',第三个“o”,和第四个“\0”)。
关于c++ - 字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116902/