C语言,用返回值为指针的函数解决

来源:百度知道 编辑:UC知道 时间:2024/05/11 21:42:08
有一字符串,包含n个字符。编写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。(下面是我写的代码,请修改)

#include<stdio.h>
void main()
{
char a[20];int m=0;char*fuzhi(char*,int);

printf("输入字符:");
gets(a);

printf("输入起始位数:");
scanf("%d",&m);

printf("%s\n",fuzhi(a,m));

}

char*fuzhi(char*ch,int r)
{char b[20];int i,j;

for(i=r;*(ch+i)!='\0';i++)
for(j=0;;j++)
*(b+j)=*(ch+i);
return(b);

}
猫猫:我复制你的程序运行报错,
error C2143: syntax error : missing ';' before 'type'
error C2065: 'x' : undeclared identifier
warning C4047: 'return' : 'char *' differs in levels of indirection from 'int '
是怎麽回事?谢谢

搞定

额 , 现在可以直接用b , 因为 数组 变量b 本身是不能修改的, 而且 函数结束后 b 的生命就结束了。
所以 我在 b的前面 加了static

for(i=r;*(ch+i)!='\0';i++) //找到 目标函数的结尾
for(j=0;j<=i-r+1;j++) // i-r 是 从m到最后字符串的长度
*(b+j)=*(ch+r-1+j); //拷贝
char * x= b;
return x;

复制以下的

#include<stdio.h>
void main()
{
char a[20];int m=0;char*fuzhi(char*,int);

printf("输入字符:");
gets(a);

printf("输入起始位数:");
scanf("%d",&m);

printf("%s\n",fuzhi(a,m));

}

char *fuzhi(char*ch,int r)
{static char b[20];int i,j;

for(i=r;*(ch+i)!='\0';i++)
for(j=0;j<=i-r+1;j++)
*(b+j)=*(ch+r-1+j);
char * x= b;
return x;

}