c - 结构数组作为参数传递给 read() 问题

标签 c file-io

我有一个结构定义为

struct my_struct {
    struct hdr_str hdr;
    char *content; 
};

我试图通过将 my_struct 中第一个元素的内容全部嵌套为 read() 的参数来传递 my_struct 中的内容

我拥有的是

struct my_struct[5];

读取定义为

ssize_t read(int fd, void *buf, size_t count);

我试图将其传递为

read(fd, my_struct[0].content, count)

但是我收到 -1 作为返回值,并且 errno = EFAULT(错误地址)

知道如何将 read 读入结构数组中的 char * 吗?

最佳答案

您需要为读取分配内存以将数据复制到其中。

如果您知道要读取的数据的最大大小,则可以将 my_struct 更改为

struct my_struct {
    struct hdr_str hdr;
    char content[MAX_CONTENT_LENGTH]; 
};

其中MAX_CONTENT_LENGTH由您#define'd到您已知的最大长度。

或者,一旦知道要读取多少字节,就按需分配 my_struct.content

my_struct.content = malloc(count);
read(fd, my_struct[0].content, count);

如果您这样做,请确保稍后在 my_struct.content 上使用 free 将其内存返回给系统。

关于c - 结构数组作为参数传递给 read() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056541/

相关文章:

c - 重复程序提示

c - 未找到 read() 结束行导致代码输出奇怪的符号

c - 使用 C 读取和传输大文件

java - jButton1ActionPerformed 和 jButton2ActionPerformed 如何共享 BufferedReader/BufferedWriter?

Python 文件模式详细信息

c - 如何限制C语言的执行时间

c - 使用 fscanf 时出现段错误

c - Cholesky 分解的 Matlab Mex C 实现

c++ - file.get() 在 C++ 循环后返回随机数

Haskell:为什么这段代码会失败?