针对一个特定的问题,我需要从用户那里获取字符串输入,其大小可以在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"的情况下完美运行。但我不知道原因。使用第一种代码的原因是为了节省时间,因为只需要一次分配内存。我错了吗? 请解释一下。
sub esp,n
。如果我猜测,TLE的避免很可能与您的低分配直接相关,导致缓冲区溢出并覆盖了“t”,将其设置为终止符(即0),从而在单个迭代之后结束循环。 - WhozCraiga = malloc(100000 + 1);
- chux - Reinstate Monica