C二维数组的小问题
void Sort(char a[6][6]);
int main()
{
char s[6][6];
char *p;
p=&s[6][6];
int i=0,j;
for(i=0;i<6;i++)
{
scanf("%s",s[i]);
}
Sort(s);
for(i=0;i<6;i++)
printf("%s\n",s[i]);
return 0;
}
void Sort(char a[6][6])
{
char temp;
for(int k=0;k<6;k++)
for(int i=0;a[k][i]!='\0';i++)
{
for(int j=i+1;a[k][j]!='\0';j++)
{
if(a[k][i]>a[k][j])
{
temp=a[k][i];
a[k][i]=a[k][j];
a[k][j]=temp;
}
}
}
}
为什么输入少于6位字符的时候输出就正常,6位时就不正常了呢?哪里出了问题?
[解决办法]
字符串以'\0'结尾
[解决办法]
没错,字符串以'\0'结尾,输入6个字符时已经超出范围了。
[解决办法]
你要是输入六个呢,没有结束符了,估计发生了越界错误!
[解决办法]
字符串以0结尾,使用scanf输入字符串按enter键后输入的字符就会放到指定位置,并且自动加上一个'\0'结尾。比如scanf("%s",s[0]);加入"flying"则s[0][0]到s[0][5]这六个位置放置flying而'\0'被放置到下一个位置就是s[1][0].下次执行scanf("%s",s[1]);时s[1][0]位置的'\0'被覆盖。。Sort函数中使用a[k][i]!='\0'就有问题了,只有k=5,i=6时才能结束判断
[解决办法]
如果直接在代码里给二维数组添加数据那么char b[5] 当然可以放入5个数据,但是你是用的scanf读入数据的,回车给你带了个 /0 ,当然最后多了个数据咯,这样就越界出错了。
[解决办法]
注意数组越界问题,字符串'\0'的隐形存在
一般情况下这些操作都会比实际多分配一部分字节出来的,
就是为了防止数组越界,导致内存出错了的
printf("%s\n",s[i]);