c语言 输入一个字符串,将该字符串中从第m个字符开始的全部字符复制到另一个字符串

程序如下
#include <stdio.h>#include <string.h>
void fun(char* s2, char* s1, int n){ while(n--) s1++; strcpy(s2,s1);}int main(){ int n; char *s1 = "helloworld"; char s2[10]={0}; printf("please input the number of 'n'(n<10)"); scanf("%d",&n); fun( s2, s1,n); printf("%s\n", s2); return 0;}

我没弄明白while(n--) s1++; strcpy(s2,s1);是怎么实现从第n个字符开始复制的,求解。

while(n--)
{
s1++;
}

s1是char * 类型的, 你把s1想成是: char s1[m+n]的一个数组, s1++ 相当于从s1[0]--->s1[1] ; 用while(n --) 则移动了n次,则移到了s1[n-1]位置
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-16
n是由主函数传递过去的数,while(n--)只要n不为0,则将s1指针向后移一位,知道n自减为0为止。所以n为多少,s1指针就向后移动多少位,最后当n自减为0时结束循环,执行strcpy(s2,s1);
第2个回答  2014-01-16
以hello world 为例,如果你想将w后的所有字符即world拷贝到S2中,则,你要将s1指向w,而s1初始化为hello world,此时s1指向h, 即需要将s1移到w, 就要将s1++,而++的次数,就是你传入的从第几个字符开始,如果从第一个,则1--为0,不做s1++操作,即进行拷贝,若从第二个字符开始,则s1 ++一次,所以要进行一次while循环
第3个回答  2014-01-16
他先要执行while(n--) s1++; 将S1指到第N个字符处,这样就相当于将S1从第N个字符处截断为一个子串,然后将这个字串copy到S2中。
第4个回答  2014-01-16
memcpy( str1+m, str2, len);
相似回答