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

标签 c

我已经在 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/

相关文章:

C程序编译但不会打印出main方法中的测试用例

c - % 后面的文本不打印

c - 解释使用按位运算符的宏

c - 我不明白一些旧的 C 数组连接

c - TTF/OTF 头表中的 checkSumAdjustment 有何用途?

c - 窗口关闭后进程保持打开状态

c++ - 许多小分配的最有效 malloc 实现?

复制指针值

c - 数据类型中的位数

c - 如何使用结构来表示复数