当我调用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;
}
如果任何代码专家都能指出我可能做错了什么以获取错误,我将非常感谢。
答案 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)