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

代码如下:/*整理名字表。编写程序,输入任意顺序的名字表,将其按字典顺序排序并输出*/#include<stdio.h>#include<string.h>constin... 代码如下:
/*整理名字表。编写程序,输入任意顺序的名字表,将其按字典顺序排序并输出*/
#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]);
}

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

正常运行。

这是怎么回事?求解。
展开
 我来答
花花浪客
推荐于2018-04-23 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:694万
展开全部
是这句
strcpy(a[M+1],a[j]);
溢出了
索引M+1溢出了你的A最大索引为M(0~M)
不出错纯属运气。
陈融一
2013-12-08 · TA获得超过299个赞
知道答主
回答量:101
采纳率:0%
帮助的人:76.1万
展开全部
char a[M+2][N];
c++的数组下标从0~n-1;
例如int a[maxn];数组下标从a[0..maxn-1];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式