中易网

C语言考试题目求答案

答案:2  悬赏:50  
解决时间 2021-04-27 16:37
题目:编程实现C语言中的strcpy函数
最佳答案

strcpy函数:


功 能: 拷贝一个字符串到另一个
用 法: char *stpcpy(char *destin, char *source);
已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
(1)不调用库函数,实现strcpy函数。
(2)解释为什么要返回char *。
解析:
代码如下:
1 #include <stdio.h>
2
3 char * strcpy(char * strDest, const char * strSrc) // 实现strSrc到strDest的拷贝
4 {
5 if ((strDest == NULL) || (strSrc == NULL)) //判断参数strDest和strSrc的有效性
6 {
7 return NULL;
8 }
9 char *strDestCopy = strDest; //保存目标字符串的首地址
10 while ((*strDest++ = *strSrc++)!='\0'); //把strSrc字符串的内容拷贝到strDest下
11
12 return strDestCopy;
13 }
14
15 int getStrLen(const char *strSrc) //实现获取strSrc字符串的长度
16 {
17 int len = 0; //保存长度
18 while(*strSrc++ != '\0') //循环直到遇见结束符’\0’为止
19 {
20 len++;
21 }
22
23 return len;
24 };
25
26 int main()
27 {
28 char strSrc[] = "Hello World!"; //要被拷贝的源字符串
29 char strDest[20]; //要拷贝到的目的字符数组
30 int len = 0; //保存目的字符数组中字符串的长度
31
32 len = getStrLen(strcpy(strDest, strSrc)); //链式表达式,先拷贝后计算长度
33 printf("strDest: %s\n", strDest);
34 printf("Length of strDest: %d\n", len);
35
36 return 0;
37 }
(1)strcpy函数的实现说明:
q 代码5~7行判断传入的参数strDest和strSrc是否为NULL,如果是则返回NULL。
q 代码第9行把strDest的值保存到strDestCopy。
q 代码第10行对strSrc和strDest两个指针作循环移动,并不断把复制strSrc内存的值到strDest内存中。
q 由于第(2)步中保存了strDest的值,因此这里只需返回strDestCopy,那么函数调用完后返回的就是strDest的值。
(2)为什么strcpy函数要返回char *类型呢?这是为了能使用链式表达式。由于在strcpy中使用了char *返回类型,因此在代码32行中可以通过这种链式表达式来同时做两个操作。首先调用strcpy使得strDest复制了strSrc指向的内存数据,然后调用getStrLen函数获取strDest字符串的长度。这样不仅调用方便,而且程序结构简洁明了。程序的输出结果如下:
1 strDest: Hello World!
2 Length of strDest: 12

全部回答

我正好有strcpy,strlen,strcat的函数自己编写后的代码,在我的程序中分别是mystrcpy,mystrlen,mystrcat.

代码如下:

void mystrcpy(char *a,char *b) { //将数组b的内容复制到数组a int i=0; while(b[i])a[i]=b[i++]; a[i]='\0'; } void mystrcat(char *a,char *b) { //将数组b内的各个数连接到数组a后面 int i=0,j=0; while(a[i]!='\0')i++; while(b[j]!='\0')a[i++]=b[j++]; a[i]='\0'; } int mystrlen(char *a) { //检验数组的元素个数 int i=0; while(a[i])i++; return i; } #include <stdio.h> main() { char a[20],b[10]; int i; printf("请输入字符串a的内容:\n"); gets(a); printf("请输入字符串b的内容:\n"); gets(b); printf("字符串a的内容是:\n"); puts(a); printf("字符串b的内容是:\n"); puts(b); mystrcat(a,b); printf("把b的内容连接到a后a的内容是:\n"); puts(a); mystrcpy(a,b); printf("把b复制给a后字符串a的内容是:\n"); puts(a); printf("把b复制给a后字符串b的内容是:\n"); puts(b); i=mystrlen(a); printf("字符串a的长度为%d个字符!",i);

}

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
全国计算机等级考试二级公共基础是什么?我考
老兵家常菜在哪里啊,我有事要去这个地方
进uc房间显示3062ms是什么意思
如何开一家建材经销店?
怎样有效去痘印
数学计算题 速
北京有哪些好画室
驰美雅汽车服务中心怎么去啊,有知道地址的么
快女刘惜君离开为什么不掉一滴眼泪
北京哪有便宜的男士包?
现在那本书最红?
QX怎么合YY
郯城第一人民医院-门诊部在什么地方啊,我要
宽带通 网速慢 没有退费业务!
为什么母蚊子吸血公蚊子不吸??
推荐资讯
我想我是海,宁静的深海 这是什么歌
盗版蓝光有几种档次 分别是什么 谢谢
任务栏的小喇叭没了,弄出来了,又没了?
QQ网络上传不了是咋回事,看图
什么是查克拉
如果 遇到 一个 很帅的人、、你该怎么办?
长了粉刺该怎么去除?
《极光世界》玩家之间的PK系统怎么样?
家装电视背景墙的线路怎么预埋
怎么举报 自问自答啊
怎么让一个人烦我啊!
聊天中886什么意思?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?