我已经在 stackoverflow 上看到了一些问题,但没有一个能解决我的问题...
我在 C 中有该代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char str[] = "";
scanf("%[^\n]", str);
printf("Você digitou: %s\n", str);
system("pause");
}
当我运行程序时,出现错误:
运行时检查失败 #2 - 变量“str”周围的堆栈已损坏。
现在,我真的不知道我做错了什么......:(
最佳答案
数组 str
在初始化时只能容纳一个 char
。对 scanf()
的调用将覆盖 str
的边界,导致未定义的行为,在这种情况下会破坏堆栈。您需要决定 str
数组应该有多大,并限制读取的字符数以防止缓冲区溢出。
要使用 scanf()
,您需要指定要读取的最大字符数:
char str[1024];
if (1 == scanf("%1023[^\n]", str)) /* Check return value to ensure */
{ /* 'str' populated. */
} /* Specify one less than 'str' */
/* size to leave space for null.*/
你也可以使用 fgets()
但之后需要删除换行符。
关于c - 运行时检查失败 #2 - 变量周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784642/