c++ - 字符串长度

标签 c++ c

字符串操作问题

http://www.ideone.com/qyTkL

在上面的程序中(在 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 chars 我们应该说它的长度(作为 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/

相关文章:

c - FTPopen()、FTPclose() 等的 API 文档。等人。串联

c - 将矩形打印到终端

C - Double 类型变量 : same formulas, 不同值

c++ - 将先前分配的指针值传递给循环

c++ - 使用 C++ 在 FireFox 中获取事件选项卡 URL

c++ - 难以创建 vulkan 实例

c++ - 如何要求约束中存在函数?

c - 在这个程序中,字符类型变量如何容纳多个字节?

c - uint32 数组到 float32 数组,就地

c++ - 具有自动转换支持的变体实现,例如 boost::any