我有以下代码
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)
但是,这会打印名称的空字符串.我不确定我做错了什么.
复制机制有两个问题:
sizeof(Info)
是5.那绝对不是这样的.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个字符.