我有以下代码:
现在我想恢复记录。
然而,这段代码打印出来的姓名为空字符串。我不确定我的操作是否有误。
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));
现在我想恢复记录。
Info j;
strncpy((char*)&j, buffer+5, sizeof(Info));
printf("%d %s", j.age, j.name);
然而,这段代码打印出来的姓名为空字符串。我不确定我的操作是否有误。
strncpy
函数会在遇到空字符\0
时停止复制。将结构体强制转换为char*
类型后,使用strncpy
函数是无效的。你可以使用memcpy
函数代替。 - Chadsizeof(Info)
。 - Andreybuffer
的大小是10个字节?为什么你从buffer + 5
开始?为什么只复制5个字节? - ecatmur