c语言问题,用冒泡排序法按顺序输出字符串

# include<stdio.h># include<string.h>
int main(void)
{
char str[1000][10];
char temp[100];
int i, j, n;

printf("请输入你要输入的字符串的个数:n=");

scanf("%d", &n);
printf("请输入字符串:");

for(i=0; i<n; ++i) scanf("%s", str);
for(j=0; j<n-1; ++j)
for(i=0; i<n-1-j; ++i)
if(strcmp(str[i],str[i+1])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],temp);
}

for(i=0;i<n;++i) printf("%s", str[i][10]);

return 0;}
哪里有问题呢

#include<stdio.h>
#include<string.h>
int main(void)
{
char str[1000][10];
char temp[100];
int i, j, n;

printf("请输入你要输入的字符串的个数:n=");

scanf("%d", &n);
printf("请输入字符串:");

for(i=0; i<n; ++i)
scanf("%s", str+i); //输入指针 str+i
for(j=0; j<n-1; ++j)
for(i=0; i<n-1-j; ++i)
if(strcmp(str[i],str[i+1])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],temp);
}

for(i=0;i<n;++i)
printf("%s\n", str+i); //输出指针 str+i

return 0;
}追问

为什么是str+i呢

追答

这就是 二维数组 的规律;与 一维数组类似,
二维数组名 可以看成一个指向 一维指针数组的 二维指针;

而这个 一维指针数组 的每一个元素即是指向 一个一维数组。一维数组在存储字符串,或者其他数据。

追问

还是不太明白,printf函数中%s对应的str+i是指针,我觉得的应该对应一个具体的内容,而不是指针啊,这是为什么呢?

前面回答的很好,帮你加分

追答

%s 是输出字符串,但是给的变量就是 该字符串的首地址,即是指针;

比如:
char *p= "abcdefg";
printf("%s", p);
这里的 p 也是字符串的首地址,也是指针!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答