char str[]="Hello";
这为字符串分配6个字节,但如果我写
char *str = "Hello";
这会覆盖数据,因为它只是为了存储1个字符吗?所以我要问的是,当我声明一个字符串,但没有初始化它(char str [12];)时,这里是保留12个字节还是初始化它?如果它们在这里初始化,那么意味着在:
char *str;
只保留1个字节,但是当我指向一个字符串时,是否会覆盖超出其界限的数据?
答案 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
数组,不涉及副本。