我想将一个struct数组复制到一个带memcpy
函数的char数组,但是当我这样做时,char数组为null。
为什么当我想要复制(带有memcpy
)struct数组到char数组时,字符数组是否为空?
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
struct group {
int num=1;
int age=2;
};
struct group a[17];
int m = sizeof(a);
char b[200];
memcpy(&b[0],&a,sizeof(a));
cout << "Hello World" << n << " " << m << endl << "b='" << b[2] << "'--" << endl;
return 0;
}
输出:
sh-4.2$ main
Hello World 136
b=''--
请提前帮助,谢谢。
答案 0 :(得分:0)
我不确定你想要实现什么,但是,你正在将二进制数据复制到字符数组。
您的第一个二进制数据字节的结构类似于
00000000 00000000 00000000 00000001
您的b[2]
将包含第3个字节,即0000 0000
,空字符\0
,通常用于终止字符串。
如果您给num
一个不同的值,您会看到它产生不同的输出。例如,尝试-1
。
注意:这里没有做endian。
答案 1 :(得分:0)
你正在做一个很大的c ++禁忌,通过混合苹果和橙子,这会导致你在调用memcpy()时溢出b [] !!!!!在任何情况下,cout :: operator&lt;&lt;就在这里在memcpy()之后,你的数组b以这些字节开头,这些字节不是可打印的字符...
01 00 00 00 02 00 00 00 ...
因此,b []包含1个字节长的无效字符串。 b [2] == 0,[]的部分被覆盖了,你很幸运,程序没有被轰炸。