C语言考试题目求答案
- 提问者网友:浪女天生ˇ性情薄
- 2021-04-27 02:02
- 二级知识专家网友:野性且迷人
- 2021-04-27 03:24
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
- 1楼网友:厌今念往
- 2021-04-27 04:36
我正好有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);
}