我试图将int的内存值复制到char缓冲区中。代码如下所示,
#define CPYINT(a, b) memcpy(a, &b, 4)
............
char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);
...........
当我打印str1时,它是空白的。请澄清。
答案 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