字符串长度

Sad*_*que 4 c c++

字符串操作问题

http://www.ideone.com/qyTkL

在上面的程序中(在C++ Primer,第三版作者Stanley B. Lippman,JoséeLajoie练习3.14中给出),字符指针的长度是len + 1

char *pc2 = new char[ len + 1];
Run Code Online (Sandbox Code Playgroud)

http://www.ideone.com/pGa6c 但是,在这个程序中,我所使用的字符指针的长度是len

char *pc2 = new char[ len ];
Run Code Online (Sandbox Code Playgroud)

当我们得到相同的结果时,为什么需要将新字符串的长度设置为1.请解释.

请注意,我在此处显示的程序略有改动.与书中的不完全相同.

gsp*_*spr 7

要在C中存储长度为n的字符串,您需要n + 1 char秒.这是因为C中的字符串只是char由空字符终止的s 数组\0.因此,存储字符串"hello"的内存看起来像

'h' 'e' 'l' 'l' 'o' '\0'
Run Code Online (Sandbox Code Playgroud)

并且由6 char秒组成,即使单词hello只有5个字母长.

你所看到的不一致可能是一个语义错误; 有人会说单词hello的长度是len = 5,所以我们需要分配len+1 chars,而有些人会说,因为hello需要6 chars,我们应该说它的长度(作为C字符串)是len=6.

顺便提一下,注意存储字符串的C方式不是唯一可能的方法.例如,可以将字符串存储为整数(给出字符串的长度),后跟字符.(我相信这是帕斯卡所做的?).如果不使用像这样的长度字段,则需要另一种方法来知道字符串何时停止.C方式是只要到达空字符,字符串就会停止.

要了解其工作原理,您可能需要尝试以下操作:

char* string = "hello, world!";
printf("%s\n", string);
char* string2 = "hello\0, world!";
printf("%s\n", string2);
Run Code Online (Sandbox Code Playgroud)

(赋值char* string = "foo";只是创建一个包含4个元素的数组的简写方法,首先给出值'f',第二个'o',第三个'o' 和第四个 '\ 0').

  • @Acme:这是一个惯例 - 必须有那个空字符,以便操纵字符串的人知道它的结束位置. (2认同)