c语言,求大神解释为什么不能运行?

#include<stdio.h>#include<string.h>#defineN3intmain(void){voidsort(char*name[],intn);... #include<stdio.h>
#include<string.h>
#define N 3
int main(void)
{
void sort(char *name[],int n);
void print(char *name[],int n);
void print(char *name[],int n);
char *a[N];
int i;
for(i=0;i<N;i++)
{
scanf("%s",&a[i]);
}
sort(a,N);
print(a,N);

}
void sort(char *name[],int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=1;j<n;j++)
{
if(strcmp(name[k],name[j])>0)
k=j;
if(k!=i)
{
temp=name[k]; name[k]=name[i]; name[i]=temp;
}

}
}
}

void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s",name[i]);
}
展开
 我来答
White_MouseYBZ
2019-12-13 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6469万
展开全部

代码的问题是使用了“野指针”!char *a[N];声明a是N个元素的cahr *型指针的数组,这N个指针还没有指向,就用scanf("%s",&a[i]);给它们赋字符串了。改如下——

  1. 在char *a[N];后增加一句char b[N][100];作为存放输入字符串的数组。

  2. 把scanf("%s",&a[i]);改成scanf("%99s",a[i]=b[i]);,先让指针a[i]指向b[i]所指向的目标(长度为100的char型数组),再给a[i]指向的目标从键盘赋字符串。

  3. 把printf("%s",name[i]);改成printf("%s\n",name[i]);或printf("%s  ",name[i]);putchar('\n');让版面好看点。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式