c - 在 for 循环 C 中使用 fscanf 读取文件
问题描述
我在读取文件时遇到问题,循环外的第一次打印已正确完成。但在 for 循环内没有从文件中读取任何内容。如果有人知道发生了什么,我正在寻找解释或帮助。(假设文件中有 n*m 个字符串,由“\t\r\n”分隔)谢谢。
{
char *file_name{
char *new_num=" ";
FILE *ifp=NULL;
int i, j, n, m;
ifp =fopen(file_name,"r");
if (ifp!=NULL)
{
fscanf(ifp,"%d %d",&n,&m );
printf("\n Data from the file: %d, %d \n",n,m);
}
for (i=0 ; i< n ;i++){
for(j=0;j<m;j++){
fscanf(ifp,"%s",new_num);
printf("\n new num : %s ",new_num);
}}
fclose(ifp);
return 0;
}
解决方案
当你这样做时:
char *new_num=" ";
...
fscanf(ifp,"%s",new_num);
您正在指示程序在字符串中写入。在某些系统中,这个字符串可能是不可变的,写入它会导致错误。
尝试一下:
char *new_num = NULL;
...
new_num = malloc(1024);
if (NULL == new_num) {
fprintf(stderr, "Out of memory?\n");
exit(8);
}
(以上解决了您的代码在我的系统(带有 glibc 2.27 的 64 位 Linux)上导致的“分段错误(核心转储)”)。
推荐阅读
- javascript - 错误:ENOENT:没有这样的文件或目录。为什么还有?
- c# - 不理解 JSON Web Tokens 的东西
- reactjs - 在 setState React 和 socketIO 中发布了重复的字母
- flutter - 使用 widget.[variable_name] 是引用 StatefulWidget 变量的最佳方式吗?
- java - 无法作为客户端连接到服务器时不会抛出异常
- javascript - 需要帮助将工作箭头函数转换为常规函数以编写单元测试
- python - 我在硒中找不到这个词
- javascript - 如何有效地通过 React 中父级的引用访问子级?
- mongoose - 按日期对所有子文档进行分组并获取每个日期的最后数据
- swift - how do I actually display a variable in SwiftUI to the end user