c - 不兼容的 C 指针加上结构采用的 seg 错误

标签 c pointers struct configuration segmentation-fault

我有一个问题,我认为我可以在几秒钟内解决,但我似乎无法弄清楚。

我想要实现的是为我的程序创建配置并立即将所有设置保存在我的文件中,而不需要太多开销。

过去,我可以使用 snprintf 手动创建结构,将整数传递到先前由内存分配的 char* 中,然后直接将其写入文件,但现在我宁愿使用平面结构这样,如果我想直接修改值,我可以不使用 snprintf 和 atoi 函数将字符串转换为数字,反之亦然。

在编写 apache 模块时,我使用 apr_file 函数打开该文件。

这是我失败的尝试:

typedef struct{
    unsigned int setting1;
    unsigned int setting2;
} allsettings;


void read_a_file(request_rec *r){
    allsettings *arecord;  //compiler didn't complain at this line but might have caused segfault
    apr_file_t *f;
    const int perm=0x0755,ior=APR_FOPEN_READ|0,iow=APR_FOPEN_WRITE|APR_FOPEN_CREATE|0;
    if (apr_file_open(&f,strres,ior,perm,r->pool)==APR_SUCCESS){
        rv=apr_file_gets(arecord,sizeof(arecord),f);
        rv=apr_file_close(f);
    }
}

编译后,我收到以下错误,我正在尝试解决该错误:

warning: passing argument 1 of 'apr_file_gets' from incompatible pointer type

但是,我通过使用 char* 转换参数 1 消除了该警告。

是否有一种简单的方法可以将文件加载到函数的两个本地整数中,而无需进行任何字符串转换或向函数分配额外的内存,并且不会收到段错误?

最佳答案

首先,arp_file_gets() 从文件中获取字符串。我相信你必须从你得到的字符串中解析出你想要的东西。
在发布的代码段中还有一些你需要关心的事情:
1. arecord 指针未分配,因此您传递到 arp_file_gets 的指针是无效指针。
2. 在此调用中: rv=apr_file_gets(arecord,sizeof(arecord),f);
我知道您需要从中读出 2 个 unsigned int文件 f。但是 sizeof(arecord) = 4 (bytes) 作为指针的大小(而不是结构大小)。

关于c - 不兼容的 C 指针加上结构采用的 seg 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313230/

相关文章:

c - 如何在编辑控件中垂直居中文本?

c - 为什么对于指针 *p,p[0] 是存储在 p 的地址而 p[1] 是 p 本身的地址?

c++ - 深入理解strcat和strlen函数

c - 指向结构的指针在传递给函数时根本不改变

c - ‘.’ 标记之前的预期构造函数、析构函数或类型转换

c - 将退出类型返回为字符串的函数

c - 我的链接列表有问题

C++如何使用来自另一个函数的调用来修改结构

计算小于 n 的最大 2 次方

将 void * 转换为指针结构?