我是C编程的新手,目前正在上大学。我遇到了这个错误,不确定在Google工作数小时后如何解决。我正在创建一个打印成绩报告的程序,并不断遇到此错误。

这是代码:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{   char Name[20];
    char cid1[5]="", cid2[5]="", cid3[5]="", cid4[5]="", cid5[5]="", cid6[5]="";
    char Description1[20]="", Description2[20]="", Description3[20]="", Description4[20]="", Description5[20]="", Description6[20]="";
    int hrs1 = 0, hrs2=0, hrs3=0, hrs4=0, hrs5=0, hrs6=0;
    char grade1[1]="",grade2[1]="",grade3[1]="",grade4[1]="",grade5[1]="",grade6[1]="";

    printf("Enter Students Name ");
    gets(Name);

    printf("Enter Class ID ");
    scanf("%s", &cid1);

    printf("Enter Class Description ");
    gets(Description1);

    printf("%s", Name);
    printf("%s", cid1);
    printf("%s", Description1);

    system("pause");
}

最佳答案

您只能读取数组支持的内容。如果您声明一个char数组有5个字节(char cid1[5]),那么您最多可以输入4个字符(第5个字符是空终止符)。如果输入更多,将破坏内存并收到该消息。
gets也是一种非常不安全的函数,可用于从输入中读取字符串,因为无法避免缓冲区溢出。 切勿使用它。使用fgets代替stdin

关于c++ - 运行时检查失败#2-变量 'cid1'周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14946437/

10-09 05:15