为什么当我想复制(使用memcpy)struct数组到char数组时,字符数组是否为空?

时间:2017-06-11 14:21:44

标签: c++ arrays struct char udp

我想将一个struct数组复制到一个带memcpy函数的char数组,但是当我这样做时,char数组为null。

  1. 为什么数据结构无法复制到struct array?
  2. 为什么当我想要复制(带有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;
    }
    
  3. 输出:

    sh-4.2$ main                                                                                                                                                             
    Hello World 136                                                                                                                                                          
    b=''--
    

    请提前帮助,谢谢。

2 个答案:

答案 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,[]的部分被覆盖了,你很幸运,程序没有被轰炸。

相关问题