【100分悬赏】各位学C懂C语言的兄弟姐妹们,能帮我看看这两个程序哪里出错了吗??

总是碰到说 NULL pointer assignment 啊。。。
最近学指针学的特别头痛。。。求亲们帮忙指点哈。。。谢谢亲们啦!
亲们能帮我仔细看看这两个程序哪里出错了吗???希望您能详细分析一下,谢谢啦!应该怎么改才能运行成功呢??
第一个程序是:试用指向指针的指针对10个字符串排序,并输出排序结果

我是这么编的
#include<stdio.h>
#include<string.h>
void sort(char **p,int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(*(p+k),*(p+j)>0)
k=j;
if(k!=i)
{
temp=*(p+i);
*(p+i)=*(p+k);
*(p+k)=temp;
}}}} int main()
{
char *name[10]={"america","word","c programming","basic","a"};
char **p;
for(i=0;i<10;i++)
*(p+i)=name[i];
sort(p,10);
for(i=0;i<10;i++)
puts(name[i]);
return 0;
}
第二个程序是,试用字符指针定义函数strcpy(s,t,m),将字符串t中从第m个字符开始的全部字符复制到字符串s中。。。

我是这么编的
#include<stdio.h>
void strcpy(char *s,char *t,int m)
{
int i,j;
for(i=m-1,j=0;t[i]!='\0';i++,j++)
*(s+j)=*(t+i);
*(s+j)='\0';
}

int main()
{
char s[81],t[81];
int m;
gets(t);
scanf("%d",m);
strcpy(s,t,m);
printf("%s",s);
return 0;
}

#include<stdio.h>
#include<string.h>
void sort(char **p,int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(*(p+k),*(p+j))>0)
k=j;
if(k!=i)
{
temp=*(p+i);
*(p+i)=*(p+k);
*(p+k)=temp;
}}}}
int main()
{
char *name[10]={"america","word","c programming","basic","a"};
char **p;
int i;
p=name; //问题一 ,必须初始化p
for(i=0;i<10;i++)
*(p+i)=name[i];
sort(p,5); //问题二 ,你排序的字符串只有5个
for(i=0;i<5;i++) //问题三
puts(name[i]);
return 0;
}

问题二
//
// 第二个程序是,试用字符指针定义函数strcpy(s,t,m),将字符串t中从第m个字符开始的全部字符复制到字符串s中。。。
//
// 我是这么编的
#include<stdio.h>
void strcpy(char *s,char *t,int m)
{
int i,j;
for(i=m-1,j=0;t[i]!='\0';i++,j++)
*(s+j)=*(t+i);
*(s+j)='\0';
}

int main()
{
char s[81],t[81];
int m;
gets(t); //这个有问题
scanf("%d",&m); //这里& ,最好先输入字符串,再输入数字
strcpy(s,t,m);
printf("%s",s);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-12
第一题
1.
把if(strcmp(*(p+k),*(p+j)>0)改成 if(strcmp(*(p+k),*(p+j))>0)
2.把主函数改成:
int main()
{
int i;
char *name[10]={"america","word","c programming","basic","a"};
char **p=name;

sort(p,5);
for(i=0;i<5;i++)
puts(name[i]);
return 0;
}
第二题:
1.strcpy是系统库函数,把名字改成cpy或者和库函数名字不同的合法标识符。
2。scanf("%d",m);改成scanf("%d",&m);
相似回答