【问题标题】:C - strcpy vs assignment [duplicate]C-strcpy与赋值[重复]
【发布时间】:2019-03-15 04:28:38
【问题描述】:

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

char word[][40],*first;

下面是第二个例子。

*first=word[0]; 
strcpy(first,&word[0]);

【问题讨论】:

  • 您所说的“等号”通常称为“赋值运算符”(=)。 “等号运算符”是==。我冒昧地编辑了您的问题以避免混淆。
  • 第二个是未定义的行为。您正在将字符串写入一个只有指针的地址,而没有分配任何内存来保存该字符串。

标签: c


【解决方案1】:

strcpy 执行深拷贝。它将内存中包含的数据复制到内存中,该地址等于指针的值,该地址等于第二个指针。

赋值只是将第一个指针的第二个指针值赋值。

这是给你的一个小图:

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

分配后:

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

strcpy 之后:

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

请注意,strcpy 要复制到的内存必须事先分配。

【讨论】:

  • @bolov 好吧,从技术上讲,我认为将方案数据显示为多字符文字是可以的。因为表达式"s" 的值是指针,而's' 的值是's' 本身的表示。但是,是的,好点子,对于新手来说,用双引号阅读会更简单。
  • 感谢您的精彩解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2017-11-21
  • 1970-01-01
  • 2021-01-07
  • 2012-10-04
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多