memcpy()将整数值复制到char缓冲区

时间:2010-11-17 08:07:58

标签: c memory pointers memcpy

我试图将int的内存值复制到char缓冲区中。代码如下所示,

#define CPYINT(a, b) memcpy(a, &b, 4)
............

char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);

...........

当我打印str1时,它是空白的。请澄清。

4 个答案:

答案 0 :(得分:7)

您正在将整数的字节表示复制到char数组中。然后请求printf将此数组解释为空终止字符串:str1[0]为零,您实际上是打印一个空字符串(我在这里跳过endianness对话)。

你期待什么?显然,如果要打印整数i的文本表示,则应使用printf("%d", i)

答案 1 :(得分:2)

printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);

代替。

整数1的二进制表示可能包含前导NUL,因此您当前的printf语句会比您想要的更早终止。

答案 2 :(得分:1)

你的意图是什么?现在你将任意字节值放入char数组,但是然后将它们解释为字符串,因为它发生的第一个字节可能是零(null),因此你的打印没什么,但很可能很多字符都是unprintable,所以printf是用来检查副本是否有效的错误工具。

所以,要么:循环遍历数组并打印每个字节的数值,%0xd可能对此有用,或者如果你的意图是实际创建int的字符串表示,那么你需要一个更大的缓冲区,和空终止符的空格。

答案 3 :(得分:0)

也许您需要将整数转换为char *,这样您就可以使用itoa函数 link text