c - 在C中输入大字符串

标签 c string memory-management

对于特定问题,我必须从用户那里获取字符串输入,其大小可以在 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/

相关文章:

c - 使用 epoll 的多线程 UDP 服务器?

c - C 中指针比较如何工作?可以比较不指向同一数组的指针吗?

c++ - 在 C++ 中将 Double 转换为 String

python - 在 Python 中删除小数点后的尾随零

windows - 为什么 Windows XP(32 位)的可用内存限制为 3GB?

c - 如何模拟大量使用的内存

Java,如何比较字符串和字符串数组

c# - 为什么数组不能被修剪?

algorithm - 在内存管理中使用链表的缺点

c++ - 异常与 errno