使用memcpy将多个数据复制到char*中
Copy multiple data with memcpy into char*
我坚持试图复制一个结构体的大小struct self和一个字到一个字符数组
我知道内存不安全,但这是我知道的唯一方法,如果有人知道更好的方法,请告诉我。
这个字符数组看起来是这样的:04 01 00 00 STRUCTDATA 58 F9 57 00
前4个字节应该是:260最后一个应该是EOP
但它不是。
代码如下:
const char * eop = std::string("EOP").c_str();
char pData[sizeof(int) + sizeof(_welcomeMessage) + sizeof(eop)];
int packetSize = sizeof(_welcomeMessage);
memcpy(pData, &packetSize, sizeof(packetSize));
memcpy(pData + sizeof(int), &_welcomeMessage, sizeof(_welcomeMessage));
memcpy(pData + sizeof(int) + sizeof(_welcomeMessage), &eop, sizeof(eop));
我希望有人能帮助我。
前四个字节确实等于260。:)
04 01 00 00
在十六进制中等于4 + 256,等于260。因此,04 01 00 00
是数字260的正确内部表示。
至于结果的第三部分,那么你正在复制指针eop
的地址,而似乎你需要复制字符串字面量"EOP"。
我看不出这个定义有什么意义
const char * eop = std::string("EOP").c_str();
此外,使用变量eop会导致未定义的行为,因为std::string类型的临时对象将在语句结束时被删除。
为什么不直接写成
const char * eop = "EOP";
或
const char eop[] = "EOP";
在这两种情况下,您必须在调用memcpy
时使用标识符eop
,而不是表达式&eop
,指定复制数据的正确大小。
至于结构体,那么它是否被正确复制就不能说什么了,因为你没有显示结构体的定义,也没有显示复制的结果。
至少,在这句话之后:
const char * eop = std::string("EOP").c_str();
eop
指向不再有效的内存,因为std::string("EOP")
的析构函数已经运行。
相关文章:
- 使用strcpy将char数组的元素复制到另一个数组
- 使用动态分配将 char* 复制到另一个字符**
- 如何将 cv::Mat & Img 复制到未签名的 char* img?opencv
- 我可以使用istream_iterator将<char>一些 istream 内容复制到 std::string 中吗?
- char 和 char& 之间是否存在相对复制开销差异?
- 如何在忽略 null 的同时将数据从 char [] 复制到常量字符 *
- 如何将const char*复制到c 中的uint8_t []
- C - 从const char*复制到字符串
- 将矢量<char>复制到 2D 矢量 <string> c++
- C++将 char 复制到 char 数组(调试断言失败)时,字符串不是以 null 结尾的
- 将内存从char*复制到较大char*中的某个位置
- C++ 使用 char* 复制字符数组(无字符串库)
- 将 boost::array<char> 复制到 std::string
- 如何将char复制到char*向量中
- 将子字符串从char*复制到std::string的优雅方式
- 如何在c++中将数组char复制到字符串或int*(void*)中
- 方便地将 std::vector<unsigned char> 复制到输入流 (std::istream) 对象
- 从char*复制到char[]
- 将char复制到struct指针char
- 如何有效地将 std::vector<char> 复制到 std::string