将任意大小的字符串分配给指向char的指针

时间:2012-02-26 04:56:24

标签: c++ char

最重要的是,我必须声明我是C ++和编程的初学者。 我会直言不讳。我想知道是否可以将任意大小的字符串分配给指向字符的指针(不是数组,只是char *指针)。这会违反任何记忆地址吗? 我正在学习的这本书似乎没有说明这一点。我似乎无法在谷歌上找到任何东西。

2 个答案:

答案 0 :(得分:2)

你有你的角色指针,想要动态创建C字符串

char *str;

说。该指针将用于指向字符串的第一个字符。字符串是内存中的一系列连续字符(字节)。我们在记忆中要做到的是什么:

 str -> +---+---+---+---+---+----+
        | H | E | L | L | O | \0 |
        +---+---+---+---+---+----+

注意最后一个字节 - 这个字节的值为0,并且调用空字符 - 它表示字符串的结尾,并且让我们知道什么时候结束。

str一个值ne分配这个内存。在C ++中,这是由new operator这样完成的

str = new char[6];

注意new有两个版本new []和new - 一个是分配一个对象数组,另一个是分配一个对象。当你用new []分配它时,总是使用delete [],同样应该使用new / delete。请勿使用delete删除new [],使用delete []

删除new

这将分配一个包含6个字符的数组来放置字符串。要将字符放入字符串中,我们就会这样做。

str[0] = `H`;
str[1] = `E];
...
str[5] = 0;

但这很乏味。相反,我们可以使用strcpy为我们执行此操作:

strcpy(str, "hello");

它知道关于null字符的所有信息。有一系列功能可以对这些类型的字符串进行操作 - 请参阅string

这是C字符串。曾几何时,有人发明了这种叫做C ++的新语言。这种语言使用了一种称为对象的不同想法,使这些东西变得更容易。您需要查看标准模板库(或STL)。有关这些字符串的说明可在string找到。 STL有很多好东西 - 这是参考STL

希望这有帮助

答案 1 :(得分:1)

char指针可以指向任意长度的字符串,因为字符串的长度取决于您在字符串中遇到NUL(0)字节的时间。以这种方式存储字符串时,它将成为C字符串。例如:

const char* str = NULL; // at this point,
                        // doesn't point to anything (not even a string)

str = ""; // valid
str = "a"; // valid
str = "hello"; // valid
str = "farewell, cruel world"; // valid