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

#include#includeintmain(){intm,n;voidcopy(char*s1,char*s2,intm);chars1[20];//n=sizeof... #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);
}
}
展开
 我来答
问明6E
高粉答主

2019-05-22 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.4万
展开全部

#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

bhtzu
推荐于2017-11-26 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4057万
展开全部
#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);
    }
}

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

追问
好像这样还是不太对,说我m值没初始化,什么意思啊,是警告
追答
#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\n",s1);
    //这里用strlen(s1)可以得到实际字符串长度
    scanf("%d",&m);
    printf("m的值为:%d\n",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);
        i++;
    }
    *(p2+i-m)=0;
}

调试了一下,这次可以了。另外,我这没有m的警告错误

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
亚马逊选品管家
2013-09-26 · TA获得超过643个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:275万
展开全部

这样就好了:

#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'
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式