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

#include
#include
int main() { int m,n; void copy(char *s1,char *s2,int m); char s1[20]; //n=sizeof(s1)/sizeof(int); char s2[20]; printf("输入字符串为:%s ",s1); gets(s1); / printf("m的值为:%d",m); scanf("%d",&m); copy(s1,s2,m); printf("result:%s\n",s2); return 0; } void copy(char *p1,char *p2,int m) { int i; //char s1[n]; //char s1[20]; //char s1[n]; for(i=m;i<n;i++) { *(p2+i-m)=*(p1+i-1); } } 出错,因为n未定义,应该怎么处理呢,我用了n=sizeof(s1)/sizeof(int);也不行
#include <stdio.h>
#include <string.h>
int main()
{
int m,n;
void copy(char *s1,char *s2,int m);
char s1[20];
//n=sizeof(s1)/sizeof(int);
char s2[20];
printf("输入字符串为:%s ",s1);
gets(s1);
/
printf("m的值为:%d",m);
scanf("%d",&m);
copy(s1,s2,m);
printf("result:%s\n",s2);
return 0;
}
void copy(char *p1,char *p2,int m)
{
int i;
for(i=m;i<n;i++)
{
*(p2+i-m)=*(p1+i-1);
}
}

#include&lt;stdio.h&gt;

void main(){

void copy(char*,int,int);

int n,m;

char string[100];

printf("enter a number n:");

scanf("%d",&n);

printf("enter a string:");

scanf("%s",&string);

printf("enter a number m:");

scanf("%d",&m);

copy(string,n,m);

return 0;

}

void copy(char*str,int n,int m){

int i,j;

char string[100];

char*p=string;

i=m-1;

j=0;

str=str+i;

for(;i&lt;n;i++,j++){

*(p+j)=*(str++);

printf("%c\n",*(p+j));

}

}

扩展资料:

printf用法颂核早

//以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)

#include&lt;stdio.h&gt;

int main()

{

int i,j;

scanf("%d%d",&i,&j);

printf("i=%d;j=%d",i,j);

return 0;

}

//以下程序用于输出“百度百科”

#include&lt;stdio.h&gt;

int main()

{

printf("百度百科");

return 0;

}

format

Format参数是包含三种对象类型的一个字符串:

*无格式野雀字符复制到输出流;

*转换规范,每个规范导致在值参数列表氏旦中检索1个或更多个项;

*转义序列。

通常意义上format的格式如下:

%[flags][width][.prec][F|N|h|l]type


#include <stdio.h>
#include <string.h>
int main()

    int m; 
    void copy(char *s1,char *s2,int m);
    char s1[20];
    char s2[20];
    //n=sizeof(s1)/sizeof(int);
    //n=sizeof(s1)会返回20,但这明显不是你需要的
    gets(s1);
    printf("输入字符串为:%s ",s1);
    枝敏//这里用strlen(s1)可铅高以得到实际字符串长度
    scanf("%d",&m);
    printf("m的值为:%d",m);
    copy(s1,s2,m);
    printf("result:%s\n",s2);
    return 0;
}
void copy(char *p1,char *p2,int m)
{
  猛激枝  int i=m;
    while(*(p1+i-1))
    {//没有必要纠结于n,直接通过字符串结束符判断就可以了
        *(p2+i-m)=*(p1+i-1);
    }
}

这样和你的程序更接近一些吧


这样就好了:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int main()

int m,n; 
void copy(char *s1,char *s2,int m);
char s1[20];
char 稿亩梁s2[20];
printf("输入字符串: ");
gets(s1);
printf("输入m的值: ");
scanf("%d", &m);
copy(s1,s2,m);
printf("result: %s\n",s2);
getchar();
return 0;
}

void copy(char *p1, char *p2, 耐液int m)
{
p1 += m;            // 移到第m个字符串
while(*p1)            // 如果p1当前不为空,则复制,如果为'\0'就结束吧
{
*p2 = *p1;       键运     // 复制当前字符
++p1;            // 向后移动
++p2;            // 向后移动
}
*p2 = *p1;            // 设置p2为'\0'
}