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]);
} 展开
#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]);
} 展开
1个回答
展开全部
代码的问题是使用了“野指针”!char *a[N];声明a是N个元素的cahr *型指针的数组,这N个指针还没有指向,就用scanf("%s",&a[i]);给它们赋字符串了。改如下——
在char *a[N];后增加一句char b[N][100];作为存放输入字符串的数组。
把scanf("%s",&a[i]);改成scanf("%99s",a[i]=b[i]);,先让指针a[i]指向b[i]所指向的目标(长度为100的char型数组),再给a[i]指向的目标从键盘赋字符串。
把printf("%s",name[i]);改成printf("%s\n",name[i]);或printf("%s ",name[i]);putchar('\n');让版面好看点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询