我从文件读取时遇到问题,循环外的第一次打印正确完成。但是在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;
}
答案 0 :(得分:1)
执行此操作时:
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)上导致的“分段错误(核心转储)”。
答案 1 :(得分:1)
为了将某些东西读入变量或指针,您应该分配空间。
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标识符。
答案 2 :(得分:0)
您将指针new_num分配给字符串文字,然后尝试对其进行修改。这将导致错误。
在此语句中:char * file_name {这可能是错字。 file_name在使用前未分配给任何字符串。