带有结构的 C 中的分段错误 11?

问题描述

我目前在此代码中遇到分段错误 11。我正在尝试读取输入文件并将其存储到我的结构中。每当我运行时,它只打印出文本文件的第一项,然后它会给我一个 Segmentation Fault 11 错误。什么可能导致这种情况?

这是我的代码:

    typedef struct{
    int serialNum;
    char giftName[50];
    int price;
    char store[50];
} product;

void read_File(const char *filename)
{
    filename = "items.txt";
    product p[4] = {0};
    int i = 0;
    FILE *file = fopen(filename,"r");
    if (file){
        char line[100];
        while(fgets(line,sizeof line,file) && i < 6){
            fputs(line,stdout);
            if (sscanf(line,"%d %s %d %s",p[i].serialNum,p[i].giftName,p[i].price,p[i].store) == 5)
                {
                    printf("Storing information in structure complete.");
                }
        }
    
    fclose(file);
}
else{
    perror(filename);
}
}

解决方法

要通过sscanf()(或其他scanf()系列)读取整数,您必须传递指针,以便sscanf()可以写入使用指针读取的整数.

另一方面,要通过sscanf()读取字符串,您不需要也不应该添加&,因为数组将自动转换为指向第一个元素。

此外,在只有 4 件事要阅读的情况下检查 == 5 也很奇怪。

            if (sscanf(line,"%d %s %d %s",&p[i].serialNum,/* add & to pass pointer */
                p[i].giftName,&p[i].price,/* add & to pass pointer */
                p[i].store) == 4) /* correct number */

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...