为什么在fscanf()函数上出现分段错误?

时间:2020-05-20 11:14:19

标签: c segmentation-fault

当我调用fscanf()函数时,我不明白为什么会出现分段错误。我知道我正在使用fopen()正确打开文件。

ST_CHAR* GetLeafFromBitmap(const ST_CHAR* filename, ST_UINT8 u8dido, ST_UINT16 u16idx)
{
    FILE* fp;
    ST_CHAR* ps8buff;
    ST_CHAR ps8numstring[20];
    ST_CHAR* ps8curleaf;
    ST_CHAR  ps8didostr[10];
    ST_CHAR  ps8idxstr[10];

    sprintf(ps8idxstr, "%d", u16idx);   
    sprintf(ps8didostr, "%d", u8dido);
    strcpy(ps8numstring, ",");
    strcat(ps8numstring,ps8idxstr);
    strcat(ps8didostr, ps8numstring);
    printf("didostr : %s\n", ps8didostr);
    if((fp = fopen(filename, "r")) == NULL)
    {
        fprintf(stderr, "\nError %d: Loading from \"%s\" file failed: %s\n", errno, filename, strerror(errno));
        return -1;
    }       
    while(fscanf(fp, "%s", ps8buff) != EOF)
    {
        if(strstr(ps8buff, ps8didostr) != NULL)
        {
            ps8curleaf = GetLeaf(ps8buff);
            return ps8curleaf;
        }
    }
    return NULL;
}

如果任何代码专家都能指出我可能做错了什么以获取错误,我将非常感谢。

1 个答案:

答案 0 :(得分:1)

ST_CHAR* ps8buff;
...
while(fscanf(fp, "%s", ps8buff) != EOF)

两件事:

1)您正在写一个未初始化的指针,您需要为其保留空间(通过malloc)或使用类似ST_CHAR ps8buff[some_size];的数组

2)您不必在EOF中检查fscanf,成功后它会返回成功匹配和分配的输入项目数,

while(fscanf(fp, "%s", ps8buff) == 1)