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



我不明白为什么我在调用 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 : %sn", ps8didostr);
if((fp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "nError %d: Loading from "%s" file failed: %sn", errno, filename, strerror(errno));
return -1;
}       
while(fscanf(fp, "%s", ps8buff) != EOF)
{
if(strstr(ps8buff, ps8didostr) != NULL)
{
ps8curleaf = GetLeaf(ps8buff);
return ps8curleaf;
}
}
return NULL;
}

如果任何代码大师可以指出我可能做错了什么以获得错误,我将不胜感激。

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

两件事:

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

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

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

相关内容

  • 没有找到相关文章

最新更新