gpt4 book ai didi

c++ - memcpy 的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 06:56:01 25 4
gpt4 key购买 nike

我想将一个无符号长整数逐字节复制到 char 缓冲区。如果我使用注释下的行,它不会被复制到缓冲区。

    char buf[128];
//unsigned long int_val = 268435456;
unsigned long int_val = 293456376;

cout << "Value of int_val: " << int_val << endl;

memset(buf, 0, sizeof(buf));

memcpy(buf, &int_val, sizeof(long));
cout << "Value after unsigned long int copy - buf: " << buf << endl;

const int len = strlen(buf);
cout << "buf" << endl << "====" << endl;
for (int i = 0; i < len; i++)
{
printf("%3d (0x%02X)\n", buf[i], buf[i]);
}

以下是每个值的两次运行的输出:

Value of int_val: 268435456
Value after unsigned long int copy - buf:
buf
===

Value of int_val: 293456376
Value after unsigned long int copy - buf: ��}
buf
===
-8 (0xFFFFFFF8)
-55 (0xFFFFFFC9)
125 (0x7D)
17 (0x11)

最佳答案

it is not copied to buffer.

是的。

cout << ... << buf << endl;
const int len = strlen(buf);

目前还不清楚为什么您没有预料到您看到的输出。 0 是空终止符的值。如果整数的最低内存顺序字节为 0,则缓冲区包含表示空字符串的空终止字符串。在这种情况下,您看到的输出是意料之中的。在小端系统(以及 long 大于 4 字节的大端系统),268435456 恰好是十六进制的 0x10'00'00'00。

仅仅因为您复制的字节代表空字符串,并不意味着这些字节没有被复制。

关于c++ - memcpy 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64535229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com