当用于指向字符串时,指向char的指针是否会覆盖内存?

时间:2012-05-24 18:08:11

标签: c++ string

char str[]="Hello";

这为字符串分配6个字节,但如果我写

char *str = "Hello";

这会覆盖数据,因为它只是为了存储1个字符吗?所以我要问的是,当我声明一个字符串,但没有初始化它(char str [12];)时,这里是保留12个字节还是初始化它?如果它们在这里初始化,那么意味着在:

char *str;

只保留1个字节,但是当我指向一个字符串时,是否会覆盖超出其界限的数据?

2 个答案:

答案 0 :(得分:2)

char *str;

不会为内容保留任何数据。它是一个指针,大小可以保存内存地址。

char *str = "Hello";

{ 'H', 'e', 'l', 'l', 'o', 0 }的6个字节已经由编译器存储在某处。现在你正在创建一个保存其地址的变量(指向它)。字符串内容不会被复制。

答案 1 :(得分:0)

char str[]="Hello";

你说得对,它是一个6 char s

的数组
char *str = "Hello";

这是一个指向字符串文字的指针。某处有一个包含6个char的数组,而您的变量str只是指向它。

char *str;

这不保留任何东西,它指向一个不确定的地方。当你指向一个字符串时,它指向一个居住在其他地方的char数组,不涉及副本。