我正在尝试将 int 的内存值复制到 char 缓冲区中。代码如下所示,
#define CPYINT(a, b) memcpy(a, &b, 4)
............
char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);
...........
当我打印 str1 时,它是空白的。请澄清。
您正在将整数的字节表示复制到 char 数组中。然后,您要求printf
将此数组解释为空终止字符串:str1[0]
为零,您实际上是在打印一个空字符串(我在这里跳过了字节顺序的讨论)。
你期待什么?显然,如果你想打印整数的文本表示i
,你应该使用printf("%d", i)
.
尝试
printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);
反而。
整数 1 的二进制表示可能包含前导 NUL,因此您当前的 printf 语句比您想要的更早终止。
你来这里的目的是什么?现在,您正在将任意字节值放入 char 数组中,然后将它们解释为字符串,因为碰巧第一个字节可能为零(空),因此您什么也不打印,但很可能许多字符将是不可打印,因此 printf 是用于检查副本是否有效的错误工具。
因此,要么:循环遍历数组并打印每个字节的数值, %0xd 可能对此有用,或者如果您的意图实际上是创建 int 的字符串表示,那么您将需要更大的缓冲区和空间一个空终止符。
也许您需要将 intger 转换为 char* 这样才能使用 itoa 函数 链接文本