我已经在stackoverflow上看到了一些问题,但没有一个能解决我的问题...
我在C中有这样的代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char str[] = "";
scanf("%[^\n]", str);
printf("Você digitou: %s\n", str);
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,我有错误:
运行时检查失败#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.*/
Run Code Online (Sandbox Code Playgroud)
您也可以使用,fgets()但之后需要删除换行符.