两个连续的fgets seg故障

时间:2015-03-30 02:39:08

标签: c arrays string segmentation-fault fgets

我目前正在尝试读入将输入到stdio的两个字符串s和t。它们将在不同的行上输入。

以下代码段错误。

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    char t[5000000];
    char s[5000000];

    fgets(t,50000,stdin);
    fgets(s,50000,stdin);

    printf("%c",t[1]);


}

但是,单个fgets没有。

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    char t[5000000];
    char s[5000000];

    fgets(t,50000,stdin);

    printf("%c",t[1]);

}

其他帖子谈论一些回归和“/ n”问题,但我不明白问题到底是什么。

2 个答案:

答案 0 :(得分:0)

数组太大而无法在堆栈上声明它们,它会填满并发生堆栈溢出,要么使用malloc在堆上声明它们,要么将它们缩小。

声明它们static也会使它工作,因为静态变量存储在不在堆栈中的内存中的不同位置。

答案 1 :(得分:0)

仅供参考:

堆栈大小因平台而异,linux平台堆栈大小默认为8MB。您可以使用系统调用getrlimit()和setrlimit()根据需要更改它并进行更改。