strcat的用法
原型:
char *strcat(char *str1,char *str2);
strcat的实现:
char* MyStrcat(char *dst, const char*src)
{
if ((dst == NULL) || (src == NULL)) //先判断指针是否为空,尽量用NULL,0有时候打错不容易发现
return NULL;
else
{
char* temp = dst; //把地址赋给临时值,之后用临时值去增加
while (*temp!='\0')
{
++temp; //把临时值的指针移动到目的代码的结尾处
}
while ((*temp++ = *src++) != '\0'); //开始在目的处后连接
return dst; //返回原始指针,方便链式连接
}
}
把两个字符串连接合并成一个字符串,也就是把字符串str2连接到字符串str1后面,连接后的结果放在字符串str1中。
注意:str1指向的内存空间要足够容纳字符串str2.
返回值为指向str1的指针。
int _tmain(int argc, _TCHAR* argv[])
{
char p1[12] = "apple"; //##p2指向的是只读数据段,strcat是要写数据。往只读数据段写,当然会有异常,p1指向的是栈数据段,可写,所以能通过##
char *p2 = "banana"; //p2是一个指向字符串的指针,编译器根据初始化此指针时给出的值生成一个字符串,然后把这个字符串的第一个字符的地址拿出来,让p2指向它,其中的数值在只读区,不能改变
strcat_s(p1, p2);
printf("%s\n", p1);
char p3[]="aaaaaa";
//strcpy(p2,p3); 有的博客说是定长,所以不能改变,这边采用相同长度去替换,也失败,主要原因就是上面说的,P2指的是只读区,里面的数据是不能改变的
strcat_s(p1,p3); //和strcat的区别只是保证安全性
printf("%s\n",p1); //这里就能正常输出了,栈数据段,可读可写
return 0;
}
总结一下:要连接字符时,要考虑连接后的字符长度是否能在目标空间中放下,另外一点就是,要看数据是否是可写的,指针指向只读区时也是不可行的,数组存放值后,编译器只是把数组的第一个字符地址给指针
strcat的用法的更多相关文章
- strcpy(),strcat()的用法
strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含 ...
- 嵌入式-C语言基础:字符串拼接函数strcat
#include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) ...
- 字符串处理strcpy strcat函数的用法
C语言函数字符串处理strcpy strcat函数的用法: 1)strcat是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串 ...
- strcat()与strcpy()用法
1.strcpy (1)原型 extern char *strcpy(char *dest,char *src); (2)用法 #include <cstring> (3)功能 把src所 ...
- strcat 函数的实现
原型 extern char *strcat(char *dest,char *src); 用法 #include <string.h> 功能 把 ...
- sprintf()函数的用法
Visual C++ sprintf()函数用法 转:http://blog.csdn.net/masikkk/article/details/5634886 在将各种类型的数据构造成字符串时,spr ...
- matlab初学之strcat、num2str
文章出处: http://blog.sina.com.cn/s/blog_6fb8aa0d01019id5.html http://wenda.so.com/q/1439143662729624 ht ...
- strcat strcpy 使用出现的问题汇总
事例1(转) 在程序中多次用的strcat函数,但是有时候编译通过,但是执行时却出现了错误.为了进一步了解strcat函数的使用,我首先写了这样的一个测试程序: main(){ char ...
- string.h文件中函数用法
下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source) ...
随机推荐
- 打包时,node内存溢出问题解决方法
在使用npm run build打包时,遇到node内存溢出问题. 网上查找到的决绝方案.解决方案一: 安装increase-memory-limit插件,扩大node的内存限制 但是,这个解决方案在 ...
- 分布式系统session同步解决方案
来源:架构师之路 session的概念 什么是session? 当浏览器端第一次访问web server时,server端会调用getSession()方法创建session对象,经过特殊算法计算出s ...
- 【安全测试自学】初探web安全处测试(三)
安全测试专家成长系列之-初探Web安全3.mp4 案例: 安全测试的前景: 总结讨论:
- ORM版学员管理系统 2
学生信息管理 展示学生信息 URL部分 url(r'^student_list/', app01_views.student_list, name="student_list"), ...
- sqlserver 使用游标过程中出现的错误
下面的见解是在使用游标的过程中做的日记.我也是第一次使用,如果有什么不对的地方请批评指正,大家一起努力. 1. 消息 16951,级别 16,状态 1,过程 usp_proc,第 16 行 ...
- element-ui Form表单校验
使用element-ui自带的表单校验,注意几个点: 1.el-form通过rules属性,绑定校验规则 2.el-form-item的prop属性,设置为需要校验的字段名 3.提交后二次校验 sav ...
- JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法
今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBac ...
- javaSE基础知识
JVM,JRE,JDK三者的简单总结 1.见名解释 Java虚拟机(JVM):Java virtual machine简称JVM:“virtual”中文意思“虚拟的”,“machine”中文意思“机器 ...
- js导出excel文件
<div id="tablesDiv"> <table id="tabDiv1"> <tbody><tr> &l ...
- java 深度复制与浅复制 copyOf、arraycopy、copyOfRange
1.copyOf 原型:public static <T> T[] copyOf(T[] original, int newLength) original:原数组 newLength:要 ...