在从文本文件中读取时使用struct时出错

时间:2014-01-31 19:51:45

标签: c struct

我是C编程的初学者,并尝试使用struct来存储相关变量,然后在主程序中使用它们。但是,当我在不使用struct的情况下运行相同的程序时,它运行正常。

代码如下所示,除了分段错误外,没有显示任何编译错误但没有输出。

#include<stdio.h>

struct test
{
char string1[10000];
char string2[10000];
char string3[10000];
char string4[10000];
}parts;

int main()
{
FILE *int_file;
struct test parts[100000];

int_file=fopen("intact_test.txt", "r");

if(int_file == NULL)
{
    perror("Error while opening the file.\n");
}
else
{
    while(fscanf(int_file,"%[^\t]\t%[^\t]\t%[^\t]\t%[^\n]",parts->string1,parts->string2,parts->string3,parts->string4) == 4)
    {
        printf ("%s\n",parts->string3);
    }
}

fclose(int_file);

return 0;
}

输入文件“intact_test.txt”包含以下行: AAAA \ tBBBB \ tCCCC \ tDDDD \ n

2 个答案:

答案 0 :(得分:2)

struct test的每个实例都是40k所以

struct test parts[100000];

尝试在堆栈上分配4GB。这将失败,导致您的seg错误。

您应该尝试减少每个struct test实例的大小,减少parts个元素并将其移出堆栈。通过给它静态存储持续时间

,您可以最轻松地完成最后一点
static struct test parts[SMALLER_VALUE];

答案 1 :(得分:0)

单个结构占用40,000个字节,你有100,000个字节。这达到了4,000,000,000字节,或大约4GB。我并不感到惊讶你是段错误

请重新考虑你在做什么。你是否正在认真阅读4个字符串,每个字符串10,000个字符?