在C中输入大字符串

时间:2014-07-05 05:48:28

标签: c string memory-management

对于特定问题,我必须从用户那里获取大小介于1 and 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”,这完全没问题。但我不明白为什么。使用第一个代码的原因是由于内存分配只进行一次,因此节省了时间。我错了吗? 请解释一下。

1 个答案:

答案 0 :(得分:6)

如果使用malloc,则会在HEAP上创建内存空间。

在第二个实现中,内存位于STACK

据我所知,堆栈比堆快。

参考:What and where are the stack and heap?


更重要的是,我认为在循环外声明char数组更合理:

char a[100000] = {};

while( t-- )
 {
   scanf( "%d", &n );
   scanf( "%s", a );
   ....
 }