电子烟烟雾浓度怎么弄:有问题的C程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 02:56:20
题目:有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串(用指针的方法)。
#include "stdio.h"
char copy(char *a,char *b,int n)
{
int i,*p1,*p2;
p1=a;p2=b;
for(i=n;*(p1+i)!='\0';i++)
*(p2+i)=*(p1+i);
*(p2+i)='\0';
return;
}
main()
{
int m,i;
char a[]="reading-room",b[20];
printf("cong di");
scanf("%d",&m);
printf("%d ge zi fu fu zhi.\n",m);
copy(a,b,m);
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}

运行不对,请大家指教

char copy(char *a,char *b,int n)应改为无返回值,并把return去掉.
int i,*p1,*p2;因为*p1,*p2是指向字符的指针,不能用int定义,应改为int i; char *p1,*p2;

p2应指向b[]的开头,且每付值一次加1 *(p2+i)=*(p1+i); *(p2+i)='\0';应改为*(p2++)=*(p1+i); *(p2++)='\0';

改正的程序如下(本程序在vc++6.0下调试通过)
#include "stdio.h"
void copy(char *a,char *b,int n)
{
int i;
char *p1,*p2;
p1=a;p2=b;
for(i=n;*(p1+i)!='\0';i++)
*(p2++)=*(p1+i);
*(p2++)='\0';

}
void main()
{
int m,i;
char a[]="reading-room",b[20];
printf("cong di");
scanf("%d",&m);
printf("%d ge zi fu fu zhi.\n",m);
copy(a,b,m);
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}

*(p2+i)=*(p1+i); 这句的意思是什么? 你再想想。 你应该是把a这个字符串从m处开始的地方赋值给b这个字符串从0开始的地方。 你的这个赋值, b前面空了一大截是空的。 所以你应该给b也添加个index j, j从下标0开始就对了。
for(i=n, j=0; *(p1+i)!='\0'; i++, j++)
*(p2+j) = *(p1+i);
*(p2+j) = '\0';

嗯楼上观察的仔细, 我没注意看那个。 你的那个程序不需要返回任何值, 所以把copy前面的char去掉。 return去掉不去掉都无所谓。

我觉得二楼的对