3

以下代码有什么区别?

1.

char *p;
strcpy(p,"String");

2.

char *p;
p = "String";

指针指向同一个字符串,但有什么区别吗?

4

3 回答 3

6

为了使第一个操作起作用,p必须指向一个大小至少为 7 字节的可写内存块。第二个操作不需要它。

在第一次操作之后,字符串仍然是可写的:您可以在第一个字符串上执行此操作,但不能对第二个字符串执行此操作:

*p= 's'; // Make the value all lowercase

第二个指针赋值指向p一个字符串字面量的内存;写入该内存是未定义的行为。

于 2013-09-14T10:09:21.423 回答
1

在第一点你说你想将字符串复制到内存块 p 指向

(所以你必须确保有足够的空间可以复制字符串)

在第二种情况下,您只需使 p 指向“String”的只读地址。

p -> [S][t][r][i][n][g][0]

但是你应该得到编译器警告,只要你没有将 p 声明为p const *

于 2013-09-14T10:31:23.573 回答
1

(1)是内存乱写,可能是运行时错误。

你不能复制到你不拥有的内存中(没有以某种方式分配)。

于 2013-09-14T10:08:21.437 回答