C++编程时出现“出现了一个问题 导致程序停止正常工作”,求原因

代码如下:
/*整理名字表。编写程序,输入任意顺序的名字表,将其按字典顺序排序并输出*/
#include <stdio.h>
#include <string.h>
const int M=4,N=20;
void main(){
char a[M+1][N];
int i,j;
printf("Input:\n");
for(i=0;i<M;i++)
scanf("%s",&a[i]);
for(i=M;i>0;i--){
for(j=0;j<i;j++){
if(strcmp(a[j],a[j+1])>0){
strcpy(a[M+1],a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],a[M+1]);
}
}
}
putchar('\n');
for(i=0;i<M;i++)
printf("%s\n",a[i]);
}

然而以另外一种顺序输入,则:

正常运行。

这是怎么回事?求解。

是这句
strcpy(a[M+1],a[j]);
溢出了
索引M+1溢出了你的A最大索引为M(0~M)
不出错纯属运气。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-08
char a[M+2][N];
c++的数组下标从0~n-1;
例如int a[maxn];数组下标从a[0..maxn-1];
相似回答