有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
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); 追答:
你主要是要理解原理,而不是要基于形式
追问:
我下去好好修改下,谢谢你的帮助,我还是一个初学者,非常感谢你
其他回答
暂无其它回答!