使用strcpy和equal运算符分配字符串

时间:2013-09-14 10:04:42

标签: c pointers strcpy

以下代码有什么区别?

1

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

2

char *p;
p = "String";

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

3 个答案:

答案 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 *