运行时检查失败#2 - 变量周围的堆栈已损坏

wik*_*rus 6 c

我已经在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'周围的堆栈已损坏.

现在,我真的不知道我在那里做错了什么...... :(

hmj*_*mjd 6

该阵列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()但之后需要删除换行符.