练习 5-3 用指针实现函数strcat(s,t)将t指向的字符串复制到s指向的字符串的尾部。
来源:互联网 发布:ubuntu 更新版本 编辑:程序博客网 时间:2024/05/16 19:50
1. 首先想到就是的将字符串s循环到‘\0’的前一个字符,然后将字符串t的地址给此时的s地址。
两个问题:
①这种s=t,是不对的,只是拷贝了指针,并没有进行字符串的复制?
②当执行语句 while(*s++);时,此时 *s='\0', 所以后面应该s--;或者这样写 while(*s) s++;
③ 注意调用mystrcat(s,t)时 ,不能定义为字符串常量(不能修改)
例: char str[ ]="hello";
不能定义为 char *str="hello".
char* mystrcat(char* s, char* t){ char* p; p = s; while (*s++) ; s = t; //不能将 字符串str2的首地址給 吗? 这样只拷贝了指针。 return p;}
int main(){ //char *str1 = "hello"; 字符串常量 不能修改 char str1[] = "hello"; char* str2 = "world"; printf("%s", strcat(str1, str2)); return 0;}
2 .
//from answer bookchar* strcat(char* s, char* t){ char* p; p = s; while (*s) s++; while (*s++ = *t++) ; return p;}
3.利用strcpy来实现。
//利用 strcpy函数来实现char* strcat3(char* dest, char* src){ char* p = dest; strcpy(dest+ strlen(dest), src); return p;}
4.看到一道笔试题,编写strcat函数,最后问strcat能把strSrc的内容连接到strDest,为什么还要char *类型的返回值?
不明白讲的什么意思?
5. 注意以下代码:
此外,注意如下代码:char *Func(void){ char str[] = "hello world"; return str; //return语句不可返回指向“栈内存”的“指针”,因为该内存在函数体结束时被自动销毁。} char *Func(void){ char *pstr = "hello world";//字符串常量存放在静态区 return pstr;}
后来在网上看了别人博客,理解了一些,比如下面一段代码。
返回指针时,下面的代码会出现问题。
解析:之前在别的地方看到一个很形象的解释,就是你去旅游,觉得当地的一家酒店的饭菜很有特色,于是就记下了它的地址门牌号之类的(相当于指针),当你回去之后,也就是函数调用完毕,返回这个指针是没有问题的,你回去之后是依然可以看这个地址门牌号的,但是当一段时间再去上次旅游的地方,可能那家酒店已经不存在了,可能变成了一家理发店或者其他什么的
所以,当函数调用结束,指针所指向的内容是存放在栈的,会随着函数一起销毁的,但是指针还是存在的,只不过此时指针指向的内容不确定,所以结果是会出错的。
include <stdio.h>char*GetMemory(void){ char p[]="hello world"; // return p;}int main(void){ char *str=NULL; str=GetMemory(); printf(str); return 0;}
但是通过其他方法我们可以避免对指针返回的错误
比如延长指针的生命期,将其设置为静态变量,使其生命期延长至整个文件
或者设置成一个字符串的常量,让其存放在静态区中也是可以的
实现的代码如下
#include <stdio.h>char *GetMemory(void){static char p[]="hello world";return p;}int main(void){printf("%s\n",GetMemory());return 0;}
或 改为这样
#include <stdio.h>char *GetMemory(void){ char *p="hello world";return p;}int main(void){printf("%s\n",GetMemory());return 0;}
- 练习 5-3 用指针实现函数strcat(s,t)将t指向的字符串复制到s指向的字符串的尾部。
- 练习5-3 用指针方式实现第2章中的函数strcat。函数strcat(s,t)将t指向的字符串复制到s指向的字符串的尾部
- 把字符串t复制到字符串s的尾部
- 练习5-4 编写函数strend(s,t)。如果字符串t出现在字符串s的尾部,该函数返回1;否则返回0
- 练习3-2 编写一个函数escape(s,t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符转换成相应的可见的转义字符序列
- 练习3-2 编写一个函数escape(s,t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符转换为\n、\t等相应的可见的转义字符序列。要求使用switch语句。
- 练5-4 习编写strend(s,t)函数。如果字符串t出现在字符串s的尾部,该函数返回1,否则返回0。
- 练习 3-2 编写一个函数escape(s, t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。
- 练习 3-2 编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。
- 用c语言实现 将src指向的字符串追加到dest指向字符串的后面
- 【C编程】将字符串t复制到字符串 s 中
- 字符指针指向的字符串复制到字符数组里
- 指向字符串的指针
- 指向字符串的指针
- 用指针方式实现strcat(s,t)函数
- 字符串的复制函数,用my_strcpy(char *s, const char *t)
- C/C++ | 29-21 两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
- C/C++ | 30-24 两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
- c++错误中英文对照
- 喝茶的好处与坏处
- 学生管理系统 链表实现
- 写自定义框架注意事项
- 从数据库中读取多个结果集的方法
- 练习 5-3 用指针实现函数strcat(s,t)将t指向的字符串复制到s指向的字符串的尾部。
- 浏览器缓存
- B-树和B+树的应用:数据搜索和数据库索引
- Eclipse快捷键大全(转载)
- 特殊字符转义
- 【Xcode】查找 EXC_BAD_ACCESS 问题根源的方法
- 梦里”连接”知多少:多表查询之内连接 VS 外连接
- android一些不常用的事件
- uml概述——为全世界服务的思想