将struct指针转换为char*并复制

use*_*000 3 c pointers

我有以下代码

struct Info { int age; char name[5]; }
char buffer[20];
Info i;
i.age = 10;
sprintf(i.name, "Case");
strncpy(buffer+5, (char*)&i, sizeof(Info));
Run Code Online (Sandbox Code Playgroud)

现在我想要恢复记录

Info j;
strncpy((char*)&j, buffer+5, sizeof(Info));
printf("%d %s", j.age, j.name);
Run Code Online (Sandbox Code Playgroud)

但是,这会打印名称的空字符串.我不确定我做错了什么.

Oli*_*rth 6

复制机制有两个问题:

  1. 你假设那sizeof(Info)是5.那绝对不是这样的.
  2. 你正在使用strncpy,这是用于字符串. Info不是字符串,所以你需要使用memcpy.

以下将有效:

char buffer[sizeof(i)];
memcpy(buffer, &i, sizeof(i));

...

memcpy(&j, buffer, sizeof(j));
Run Code Online (Sandbox Code Playgroud)

还有另一个问题; name[5]并不足以容纳"Casey",因为一旦你考虑了空终止符,那就是6个字符.