以下代码有什么区别?
1
char *p;
strcpy(p,"String");
2
char *p;
p = "String";
指针指向同一个字符串,但是有什么不同吗?
答案 0 :(得分:6)
为了使第一个操作起作用,p
必须指向一个至少7个字节的可写内存块。第二个操作不需要它。
第一次操作后,字符串仍然可写:你可以在第一个字符串上执行此操作,但不能在第二个字符串上执行此操作:
*p= 's'; // Make the value all lowercase
第二个指针赋值给{1}}一个字符串文字的内存;写入该内存是未定义的行为。
答案 1 :(得分:1)
(1)
是内存涂鸦,可能是运行时错误。
您无法复制到您不拥有的内存中(没有以某种方式分配)。
答案 2 :(得分:1)
在第一点,你说你要将字符串复制到memblock p指向
(所以你必须确保有足够的空间可以将字符串复制到其中)
在第二种情况下,只需使p指向“String”的只读地址。
p -> [S][t][r][i][n][g][0]
但是你应该得到编译器警告,因为你没有将p声明为p const *