我怎样才能写入缓冲区(空指针)?

我想写2个字符和一个位vector(uint64_t)到一个文件,但我首先必须将它们全部写入缓冲区。 然后缓冲区将被写入文件。 我应该如何将这3个variables写入一个缓冲区(void指针),以便所有variables都可以包含在一个(void指针)variables中。

比如我想写

char a = 'a'; char b = 'b'; uint64_t c = 0x0000111100001111; 

 void *buffer = malloc(sizeof(char)*2+sizeof(uint64_t)); 

然后用文件写入一个文件

 write(fd, buffer, sizeof(char)*2+sizeof(uint64_t)); 

这是(几乎*)完全安全的方式:

 uint8_t *buffer = malloc(2 + sizeof(uint64_t)); buffer[0] = a; buffer[1] = b; memcpy(buffer + 2, &c, sizeof(c)); 

你可能会试图做一些像*(uint64_t *)(buffer + 2) = c; 但由于对齐限制,这不是可移植的。

注意sizeof(char) == 1 ,每个定义在C标准中。

(*)我假设了8位char ,这几乎是,但不是完全通用的; 在16位char的平台上,也可以使用memcpy作为ab

那么,你可以将数据放入这样的缓冲区:

 void *buffer = malloc(size_of_buffer); char *ch = buffer; *pos++ = a; *pos++ = b; *(uint64_t*)(pos) = c 

或者像cnicutar建议使用memcpy。 不过,我认为这样做更容易,也更容易出错,只需将每个元素写入文件即可:

 write(fd, &a, sizeof a); write(fd, &b, sizeof b); write(fd, &c, sizeof c); 

小心endian问题。