C语言中的strcpy和赋值有什么区别?

5

如果我使用strcpy()函数和赋值运算符,它们有什么区别吗?

char word[][40],*first;

以下是第二个示例。
*first=word[0]; 
strcpy(first,&word[0]);

1
你所说的“等于号”在编程中更常被称为“赋值运算符”(=)。而“等于运算符”则是 ==。我已经修改了你的问题以避免混淆。 - Sander De Dycker
4
第二个是未定义的行为。你正在将字符串写入一个地址,其中只有一个指针,没有分配任何内存来保存该字符串。 - Blaze
1个回答

12

strcpy函数执行深复制。它会将指针变量存储的地址所对应的内存中的数据复制到另一个指针变量存储的地址所对应的内存中。

而赋值仅仅是将第一个指针的值直接赋给第二个指针。

以下是一个简单的示意图:

A -> "some data           "
B -> "some other data     "

分配后:

A -> "some data           "
   /
  /
B    "some other data     "

复制后:

A -> "some data           "
B -> "some data           "
请注意,strcpy复制的内存必须事先分配好。

@bolov 嗯,从技术上讲,在方案中显示数据作为多字符文字是可以的,我认为。因为表达式“s”的值是指针,而“'s'”的值是“'s'”本身的表示。但是,是的,好点子,对于初学者来说,使用双引号更容易阅读。 - V. Kravchenko
感谢您的精彩解释。 - Chris N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接