使用fscanf读取ASCII代码文件

使用fscanf读取ASCII代码文件,c,ascii,scanf,C,Ascii,Scanf,我正在尝试读取ASCII文本文件并将其写入二进制文件。文本文件的大小不受限制。首先,我试着在写之前先阅读文本文件。然而,我不断地犯分段错误。我不明白是什么引起了这个问题。即使使用gdb,我仍然无法解决这个问题。请告知 代码: 代码中的问题是您有一个指针: FileData** input; 您正在使用该指针,即使它尚未初始化为指向任何有效内存 由于您在读取文件后立即将数据写入标准输出,因此可以使用: FileData input; while( fscanf(infile,"%d %lf %5

我正在尝试读取ASCII文本文件并将其写入二进制文件。文本文件的大小不受限制。首先,我试着在写之前先阅读文本文件。然而,我不断地犯分段错误。我不明白是什么引起了这个问题。即使使用gdb,我仍然无法解决这个问题。请告知

代码:
代码中的问题是您有一个指针:

FileData** input;
您正在使用该指针,即使它尚未初始化为指向任何有效内存

由于您在读取文件后立即将数据写入标准输出,因此可以使用:

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\u 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);
}

你从不初始化
input
不是答案,但是为什么
printf(“%[^\n]s”…
而不是普通的
printf(“%s”…
为什么你要将输入声明为文件数据指针?这里
FileData**input;
在使用fscanf之前,你需要使用malloc为
input
分配内存。@nIcE cOw
fscanf(inflee,“%s”,someString);
不会扫描“这是一行文本”,而只扫描“这是一行文本”“。谢谢您的建议。结构文件数据是赋值的一部分。我无法更改它。@SunnyTrinh您得到的浮点值是否正确。我在这里得到的所有浮点值都是0.000。似乎我们需要在fscanf函数中使用%lf才能正常工作。@Sarwan建议从
%d%f%[^\n]s中删除
s
-->%d%lf%55[^\n]“。最好执行
%55[^\n]
以确保
数据TR
不会溢出。
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);
}
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);
}