为什么我在 fscanf() 函数上出现分段错误?
Why am I getting segmentation Fault on fscanf() function?
我不明白为什么在调用 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;
}
如果任何代码专家能指出我可能做错了什么导致错误,我将不胜感激。
ST_CHAR* ps8buff;
...
while(fscanf(fp, "%s", ps8buff) != EOF)
两件事:
1) 你正在写一个未初始化的指针,你需要为它保留 space(通过 malloc
)或使用像 ST_CHAR ps8buff[some_size];
这样的数组
2) 您不必在 fscanf
中检查 EOF
,如果成功,它 returns 成功匹配和分配的输入项的数量,而是:
while(fscanf(fp, "%s", ps8buff) == 1)
我不明白为什么在调用 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;
}
如果任何代码专家能指出我可能做错了什么导致错误,我将不胜感激。
ST_CHAR* ps8buff;
...
while(fscanf(fp, "%s", ps8buff) != EOF)
两件事:
1) 你正在写一个未初始化的指针,你需要为它保留 space(通过 malloc
)或使用像 ST_CHAR ps8buff[some_size];
2) 您不必在 fscanf
中检查 EOF
,如果成功,它 returns 成功匹配和分配的输入项的数量,而是:
while(fscanf(fp, "%s", ps8buff) == 1)