【发布时间】:2014-11-05 04:32:46
【问题描述】:
我正在尝试读取 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!
【问题讨论】:
-
你永远不会初始化
input -
不是答案,但为什么
printf("%[^\n]s"...而不是普通的printf("%s"... -
为什么将输入声明为指向 FileData 指针的指针?
-
这里
FileData **input;需要在使用fscanf之前使用malloc给input分配内存。 -
@nIcE cOw
fscanf(infile, "%s", someString);不会扫描“This is a line of text”,而只会扫描“This”。