[英]reading a file with fscanf in a for loop C
我在从文件读取时遇到问题,循环外的第一次打印正确完成。 但是在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)上导致的“分段错误(内核已转储)”)。
为了将某些东西读入变量或指针,您应该分配空间。
char *new_num=" ";
在这里,它在文本段中写入字符串,并将该指针指向new_num。
我对您的代码未做任何更改
#include <stdio.h>
#include <stdlib.h>
#define SIZE 50
int main()
{
char *file_name;
char new_num[SIZE];
FILE *ifp=NULL;
int i, j, n, m;
file_name = "input.txt";
ifp =fopen(file_name,"r");
if (ifp!=NULL)
{
fscanf(ifp,"%d %d",&n,&m );
printf("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("new num : %s\n ",new_num);
}
}
fclose(ifp);
return 0;
}
通过将名称new_num解释为整数,我建议您使用apt数据类型而不是%s
为此,您需要修改new_num的数据类型
type new_num[SIZE];
在fscanf
内部使用apt标识符。
您将指针new_num分配给字符串文字,然后尝试对其进行修改。 这将导致错误。
在此声明中:char * file_name {这可能是一个错字。 在使用file_name之前,未将其分配给任何字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.