有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

原问题:有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
分类:编程开发 > 最后更新时间:【2016-12-11 16:31:23】
问题补充:

Sample Input:

6

abcdef

3

Sample Output:

cdef

运行后,我的答案输出为cdef@? 求大神指点哪错了,谢谢

老师说我没有用'\0'结束,还说让我用for循环输出,但我试了还是不对

#include<stdio.h>

#include<string.h>

void copy(char a[],int m);

int main(void)

{

int n,m,i,j;

char a[20];

scanf("%d",&n);

getchar();

for(i=0;i<n;i++)

{

a[i]=getchar();

}

scanf("%d",&m);

copy(a,m);

return 0;

}

void copy(char a[],int m)

{

int i,j=0;

char b[20];

for(i=m-1;i<strlen(a);i++)

{

b[j]=a[i];

j++;

}

for(i=0;i<m-1;i++)

{

printf("%s",b);

break;

}

}

补充:学校OJ系统里的题目,要求调用函数,不用字符串复制函数strncpy,麻烦大神指导

最佳答案

代码挺烂,问题挺多。老师说得也对,确实没有以'\0'结束,可以这样定义a字符串:char a[20] = {0};或者在接受字符串后,由于指定字符串长度为6,则a[6] = '\0';其它的问题我就不说了,你这种设计是最低效最杂乱的设计,我可以给你写一个函数:

char* my_strncpy(char *dst, const char *src, int m)

{

char *tmp = dst;

src += m - 1;

while ((*dst++ = *src++) != '\0') ;

return tmp;

}

这样,按如下调用则可

char a[20];

printf("%s\n", my_strncpy(a, "abcdef", 3));


追问:
哥们儿,说了不用strncpy 函数,并且指针还没学,…… 追答:
兄弟,哪用到strncpy函数了?是不是要我把my_strncpy改成copy??指针没学的话可以改为用数组实现 追答:
void copy(char dst[], char src[], int len, int m){ int tmp = 0; for (int i = m - 1; i < len; ++i) dst[tmp++] = src[i]; dst[tmp] = "\0";}调用:char a[20];copy(a, "abcdef", 6, 3);printf("%s\n", a); 追答:
你主要是要理解原理,而不是要基于形式

  • 追问:
    我下去好好修改下,谢谢你的帮助,我还是一个初学者,非常感谢你
    最佳答案由网友  听枫2005  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    5

    分享到:

    其他回答

    暂无其它回答!

      推荐