数组越界,你定义num[200],但是循环里面i<=200,会出现num索引到200的情况,所以提示你stack错误。
如果解决你您的问题,请点赞采纳,谢谢。
将数组容量扩大试试
【相关推荐】
**
存储一:单个字符的存储
char a[10];
for(int i = 0;i<10;i++)
scanf("%c",a[i]);//输入qwert12345
//此时存储的字符为 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';
对于单个字符的存储,如上述,它只是一个普通的存放十个元素的数组,系统不会为其末尾自动添加’\0’,它只是按照你的输入,将你输入的字符存放至指定位置的数组空间,由于循环进行十次,所以你还必然要输入十个元素
可以等效为:
char a[10]={'q','w','e','r','t','1','2','3','4','5'};
//这也只是一个普通的存放十个元素的数组,不会为其末尾自动添加'\0',访问最大的下标是a[9];
存储二:字符串在字符数组的存储方式:
char a[20];
scanf("%s",a);//输入qwert12345
//此时存储的字符还是按照 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';进行存储,但是需要注意,由于是用字符串进行存储,也就导致了数组长度需要比字符串长度至少多出一位存储空间,字符串末尾系统会自动为其添加'\0'
*当以如此方法存储时:
对于上述直接输入一条串,C语言的存储也是每个数组元素存储一个字符,C语言不具有存储整条串的能力,不可以将"qwert12345"整条串存入数组一个单元内。
用C++进行验证如下:
对于此类情况:
char a[1];
a = “qwert12345”;
是错误的,“qwert12345"是一个字符串常量,而字符串常量代表的是地址值,数组名也是地址常量 ,这样的本质是将地址赋给了地址;更者,由于字符数组长度为1,只有一个存储单元,即使改成
char a[1];
scanf(”%s",a);//输入qwert12345
也是错误的,同上述字符串结束系统自动添加’\0’问题,以及字符串的存储是以每个字符进行存储的,这样的做的结果是导致数组溢出
可以如下:
char *a = “qwert12345”;
这样是将字符串常量的地址赋给指针,即让指针指向该字符串常量。由于是它一个串,所以系统会为此串的末尾加上字符串结束符,即 ‘\0’,
也可以如下:
char a[20];
char *a1 = a;
scanf("%s",a1); //输入 qwert12345
这样是定义一个字符数组,又定义一个指针,让指针指向字符数组首地址,每个字符数组其中存放单个字符,输入一条串,串的第一个字符存入数组a1的首地址的位置,串的第二个字符,存入数组下一个地址…还是按照a[0]=‘q’;a[1]=‘w’;a[2]=‘e’;…a[8]=‘4’;a[9]=‘5’;进行存储,末尾添加结束符’0’