c语言新手上路,求教一下为什么我这个输入字符串的时候用scanf运行出来不对啊

#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char ch,chuan[5][81],temp[81];
printf("Input 5 strings:\n");
for(i=0;i<5;i++)
{
scanf("%s",chuan[i]);//就这儿,但是我改成get(chuan[i]);运行就对了,没搞懂
}
for(i=1;i<5;i++)
{
for(j=0;j<5;j++)
{
if(strcmp(chuan[j],chuan[j+1])>0)
{
strcpy(temp,chuan[j]);
strcpy(chuan[j],chuan[j+1]);
strcpy(chuan[j+1],temp);
}
}
}
printf("---------------------------\n");
for(i=0;i<5;i++)
{
puts(chuan[i]);
}
}

第1个回答  2019-05-11

这个比较坑,题主用地址是没有错的。但是scanf在读入字符串时,要加缓冲区的大小作为scanf的第三个参数,scanf("%s",chuan[i]); 改为 scanf("%s",chuan[i], 81);

可以参考下面博客

scanf读入字符串问题

第2个回答  2019-05-11
&chuan[i]追问

chuan[i]是一个列地址啊,为什么地址前面还要加一个取地址符呢?

追答

chuan是地址,chuan[i]是值

第3个回答  2019-05-11
scanf的第二个参数应该是变量地址追问

是地址啊,chuan是个二维数组,chuan[i]不就是二维数组的列地址吗

相似回答