在C中输入大字符串

问题描述 投票:0回答:2

对于特定问题,我必须从用户那里获取字符串输入,其大小可以在

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”,这工作得很好。但我不明白为什么。使用第一个代码的原因是可以节省时间,因为内存分配只完成一次。我错了吗? 请解释一下。

c string memory-management
2个回答
6
投票

如果使用malloc,内存空间将在

HEAP
上创建。

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

STACK

据我所知,堆栈比堆更快。

参考:栈和堆是什么以及在哪里?


更重要的是,我认为在循环之外声明

char
数组更合理:

char a[100000] = {};

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

-1
投票

好的,你可以用这个:`

int main(){

    char *text=NULL;
    size_t size=0;
    printf("Enter text: ");
    getline(&text,&size,stdin);
    text[(strcspn(text,"\n"))]=0; //removing new line character in the string
    printf("%s\n",text);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.