首页 > 解决方案 > 在 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;
}

标签: cfilescanf

解决方案


当你这样做时:

 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)上导致的“分段错误(核心转储)”)。


推荐阅读