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 : %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)您正在写入一个未初始化的指针,您需要为它保留空间(通过malloc
)或使用类似的数组ST_CHAR ps8buff[some_size];
2)您不必检查EOF
in fscanf
,成功时它会返回成功匹配和分配的输入项的数量,而不是:
while(fscanf(fp, "%s", ps8buff) == 1)
推荐阅读
- html - 无法在固定位置 div 下方使用滚动条
- php - Magento 2.3.2 - 单击使用贝宝快速结帐付款时删除自定义属性地址
- linux - 如何通过 RDP 访问 Azure Linux 虚拟机
- python - pandas.groubpy.apply 执行了太多次?
- jenkins - 条件步骤(多个) - Jenkins 中的量角器分片直到最后一步才运行
- php - 通过 curl 返回错误获取给出“echo json_encode”的页面
- react-native - 使用 React Navigation 时,打开带有通知的应用程序会导致标题增长
- javascript - Javascript递归:从M长度的N个数组中提取单个项目的所有唯一组合
- reactjs - 如何使类组件方法可以在 React 和 Typescript 中的组件之外访问?
- c# - 如何从表中添加一些列并在另一个中显示它们