将m个字符开始的全部字符复制到另一个字符串,c语言,这程序错哪里了?

#include<stdio.h>
#include<string.h>
char *f(char *p,int m)
{
char b[100];
strcpy(b,p+m);
return b;
}
int main()
{
char a[100];
int m,d;
while(~scanf("%s,%d",a,&m))
{
printf("%s",f(a,m));
}
return 0;
}

char b[100]; 尽管最终把数组a中的从第m个元素开始的字符都复制到b中了,但是函数f结束的时候b被释放了,所以不能完成在main中对于这个被释放掉的内存数据的输出;
在这个问题中你的scanf函数中不要加上逗号,在这个问题中由于前面是字符串,那么逗号加上前面的字符就都属于数组a中的内容,所以输入会失败。
我改了下
#include<stdio.h>
#include<string.h>
void f(char *p,char *q,int m)
{
strcpy(p,q+m);
}
int main()
{
char a[100];
int m,d;
char b[100];
while(~scanf("%s%d",a,&m))
{ f(b,a,m); printf("%s",b); }
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-09

/*

1234567890 5

567890

aqswde12345678 7

12345678

q q

Press any key to continue

*/

#include <stdio.h>
#include <string.h>

char *f(char *d,char *s,int start) { // 从s的第start个字符开始复制到d中
    strcpy(d,s + start - 1);
return d;
}

int main() {
char s[100],t[100];
int start;
while(scanf("%s%d",s,&start) == 2) {
printf("%s\n",f(t,s,start));
}
return 0;
}

第2个回答  2014-02-09
1. strcpy(b,p+m); -> strncpy(b,p,m)

2. return b,b不能是局部变量,应该是全局变量才能返回。
相似回答