对于特定问题,我必须从用户那里获取字符串输入,其大小可以在 1 和 10^5
之间。
我使用了以下代码
char *a;
a = malloc(100000*sizeof(char));
在一个循环中(t指的是测试用例的数量)
while( t-- )
{
scanf( "%d", &n );
scanf( "%s", a );
.....
}
n 是用户在运行时输入的字符串的长度。问题是这是给我“超过时间限制”
我对上面的代码做了一些改动,
while( t-- )
{
scanf( "%d", &n );
char a[n];
scanf( "%s", a );
....
}
在没有 "TLE"的情况下,这工作得很好。但我不明白为什么。使用第一个代码的原因是可以节省时间,因为内存分配只进行一次。我错了吗? 请解释。
最佳答案
如果使用 malloc,内存空间将在 HEAP
上创建。
而在第二个实现中,内存位于STACK
。
据我所知,堆栈比堆快。
引用:What and where are the stack and heap?
此外,我认为在循环外声明char
数组更合理:
char a[100000] = {};
while( t-- )
{
scanf( "%d", &n );
scanf( "%s", a );
....
}
关于c - 在C中输入大字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24583414/