0

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

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

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

...........

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

4

4 回答 4

7

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

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

于 2010-11-17T08:10:56.000 回答
2

尝试

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

反而。

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

于 2010-11-17T08:36:46.640 回答
1

你来这里的目的是什么?现在,您正在将任意字节值放入 char 数组中,然后将它们解释为字符串,因为碰巧第一个字节可能为零(空),因此您什么也不打印,但很可能许多字符将是不可打印,因此 printf 是用于检查副本是否有效的错误工具。

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

于 2010-11-17T08:17:43.370 回答
0

也许您需要将 intger 转换为 char* 这样才能使用 itoa 函数 链接文本

于 2010-11-17T08:14:42.937 回答