1
char str[]="Hello";

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

char *str = "Hello";

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

char *str;

只有 1 个字节被保留,但是当我让它指向一个字符串时,这不会覆盖超出它的界限的数据吗?

4

2 回答 2

2
char *str;

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

char *str = "Hello";

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

于 2012-05-24T18:10:10.297 回答
0
char str[]="Hello";

你没看错,它是一个 6 chars的数组

char *str = "Hello";

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

char *str;

这不保留任何东西,它是一个指向不确定位置的指针。当你让它指向一个字符串时,它指向一个char存在于其他地方的 s 数组,不涉及副本。

于 2012-05-24T18:11:13.087 回答