【发布时间】:2021-12-11 09:46:07
【问题描述】:
所以一开始我是 C 的菜鸟,并且正在学习内存操作。我有一个名为void* buffer 的缓冲区。然后我想将一个整数放入该缓冲区的前 4 个字节(因为 int 是 4 个字节,但如果我错了,请纠正我)。我会这样做吗:
memset(buffer, '9', sizeof(int))
如果我要以错误的方式填充前 4 个字节,请随时纠正我。
【问题讨论】:
-
运行这段代码时缓冲区发生了什么?您需要有一些方法来验证您写入缓冲区的内容,例如一个实用函数来打印每个字节的十六进制值,否则你将很难学习。这将向您展示为什么此代码不符合您的要求。此外,“9”(字符)与 9(整数)完全不同。
-
两次没有。 (1) 我猜
buffer还没有指向任何地方。 (但如果确实如此,请向我们展示您如何声明buffer,以及如何将其设置为指向某个位置。) (2)memset仅适用于将区域的每个字节设置为某个值,因此它通常仅适用于(a) 将字符串的所有字符设置为相同的字符,或 (b) 将数据结构的所有字节设置为 0。如果要设置整数数组的第一个整数,则宁愿使用buffer[0] = 9;(虽然这不适用于void *buffer)。 -
@SteveSummit 你正确的缓冲区没有指向任何地方,我只是将它用作一个数组来存储整数和字符,但我希望它们在内存中完全相邻。所以从你的解释看来我不想使用 memset。
-
@John 你更大的问题是,如果
buffer没有指向任何地方,但你不能将它用于任何东西。 (除非你这样做,否则没有人会为其分配内存。) -
@SteveSummit 我只是使用缓冲区作为数据包将数据从客户端传输到服务器。但我希望我的“数据包”从内存地址 0x01 开始从前面填充,因为 0x00 为 NULL,并且不跳过数据包条目之间的任何字节。