在 C 中复制一个带有字符串成员的结构

标签 c arrays string struct

我有一个简单的结构,其中包含一个定义为 char 数组的字符串。我认为使用赋值运算符将结构的一个实例复制到另一个实例只会复制存储在 char 指针中的内存地址。相反,字符串内容似乎被复制了。我举了一个非常简单的例子:

#include <stdio.h>
#include <string.h>

struct Test{
  char str[20];
};

int main(){

  struct Test t1, t2;
  strcpy(t1.str, "Hello");
  strcpy(t2.str, "world");
  printf("t1: %s %p\n", t1.str, (char*)(t1.str));
  printf("t2: %s %p\n", t2.str, (char*)(t2.str));
  t2 = t1;
  printf("t2: %s %p\n", t2.str, (char*)(t2.str));
  return 0;
}

用 gcc 4.9.2 编译这段代码我得到:

t1: Hello 0x7fffb8fc9df0
t2: world 0x7fffb8fc9dd0
t2: Hello 0x7fffb8fc9dd0

据我所知,在 t2 = t1 之后,t2.str 指向它在赋值之前指向的同一内存地址,但现在在该地址内,在 t1.str 内找到了相同的字符串。所以在我看来,字符串内容已经自动从一个内存位置复制到另一个内存位置,我认为 C 不会这样做。我认为这种行为是由于我将 str 声明为 char[] 而不是 char* 而触发的。实际上,尝试使用 t2.str = t1.str 将一个字符串直接分配给另一个字符串会出现此错误:

Test.c: In function ‘main’:
Test.c:17:10: error: assignment to expression with array type
   t2.str = t1.str;
      ^

这让我觉得在某些情况下,数组的处理方式与指针不同。我仍然无法弄清楚数组赋值的规则是什么,或者换句话说,为什么当我将一个结构复制到另一个结构时复制结构内的数组,但我不能直接将一个数组复制到另一个数组。

最佳答案

该结构不包含指针,但包含 20 个字符。 在t2 = t1之后,t1的20个字符被复制到t2中。

关于在 C 中复制一个带有字符串成员的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002764/

相关文章:

c - Tic-Tac-Toe 游戏功能检查获胜者

c - 使用 C 中的管道在 ipc 中连续写入和读取消息

c - 如何避免 '+' '-' vanshing 但没有意义?

c - 分配内存并在c中保存字符串

c - Sqlite3.c 中的 For 循环语法错误

java - java中过滤字符串

java - String[] 取空值

C编程作业中涉及数组的问题

c++ - 从 C++ 中的 istream 对象读取时如何检测空行?

c - 使用按位运算符进行快速字符串搜索