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