两个连续的 fgets 段错误
two consecutive fgets seg faults
我目前正在尝试读入将输入到 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]);
}
其他帖子谈到了一些return和“/n”的问题,但我不明白到底是什么问题。
数组太大,无法在堆栈上声明它们,它会填满并发生堆栈溢出,要么使用 malloc
在堆上声明它们,要么将它们变小。
声明它们 static
也会使其工作,因为静态变量存储在内存中的不同位置而不是堆栈上。
仅供参考:
堆栈大小因平台而异,linux 平台堆栈大小默认为 8MB。您可以根据需要使用系统调用 getrlimit() 和 setrlimit() 对其进行修改和更改。
我目前正在尝试读入将输入到 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]);
}
其他帖子谈到了一些return和“/n”的问题,但我不明白到底是什么问题。
数组太大,无法在堆栈上声明它们,它会填满并发生堆栈溢出,要么使用 malloc
在堆上声明它们,要么将它们变小。
声明它们 static
也会使其工作,因为静态变量存储在内存中的不同位置而不是堆栈上。
仅供参考:
堆栈大小因平台而异,linux 平台堆栈大小默认为 8MB。您可以根据需要使用系统调用 getrlimit() 和 setrlimit() 对其进行修改和更改。