我正在尝试读取ASCII文本文件并将其写入二进制文件。文本文件的大小不受限制。首先,我在写之前尝试读取文本文件。但是,我一直在分段错误。我不明白可能导致问题的原因。即使使用gdb,我仍然无法弄清楚问题。请指教。
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct _FileData
{
int a;
double b;
char dataStr[56];
}FileData;
int main()
{
FILE * infile=fopen("output.txt", "r");
if(infile==NULL)
{
printf("Error opening file");
exit(1);
}
FileData **input;
int i=0;
while( fscanf(infile,"%d %f %[^\n]s",&input[i].a,&input[i].b,&input[i].dataStr)! =NULL)
{
printf("%d",input[i].a);
printf("%.3f",input[i].b);
printf("%[^\n]s",input[i].dataStr);
i++;
}
return 0;
}
47
34.278
This is a line of text
48
23.678
This a very very long line
49
12.4569
This a very short line
50
117.906
This world is so beautiful
51
34.789
Hello world!
答案 0 :(得分:2)
代码中的问题是你有一个指针:
FileData** input;
您正在使用该指针,即使它尚未初始化为指向任何有效内存。
由于您在阅读文件后立即将数据写入stdout
,因此您可以使用:
FileData input;
while( fscanf(infile,"%d %lf %55[^\n]",&input.a, &input.b, input.dataStr) == 3)
// Notice the chage here
{
printf("%d",input.a);
printf("%.3f",input.b);
printf("%s\n",input.dataStr);
}
但是,我不理解struct _FileData
的必要性。您可以轻松使用:
int intValue;
double doubleValue;
char stringValue[56];
while( fscanf(infile,"%d %lf %55[^\n]",&intValue, &doubleValue, stringValue) == 3)
{
printf("%d %.3f %s\n",intValue, doubleValue, stringValue);
}