原型:

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的用法的更多相关文章

  1. strcpy(),strcat()的用法

    strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含 ...

  2. 嵌入式-C语言基础:字符串拼接函数strcat

    #include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) ...

  3. 字符串处理strcpy strcat函数的用法

    C语言函数字符串处理strcpy strcat函数的用法: 1)strcat是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串 ...

  4. strcat()与strcpy()用法

    1.strcpy (1)原型 extern char *strcpy(char *dest,char *src); (2)用法 #include <cstring> (3)功能 把src所 ...

  5. strcat 函数的实现

    原型        extern char *strcat(char *dest,char *src); 用法        #include <string.h> 功能        把 ...

  6. sprintf()函数的用法

    Visual C++ sprintf()函数用法 转:http://blog.csdn.net/masikkk/article/details/5634886 在将各种类型的数据构造成字符串时,spr ...

  7. matlab初学之strcat、num2str

    文章出处: http://blog.sina.com.cn/s/blog_6fb8aa0d01019id5.html http://wenda.so.com/q/1439143662729624 ht ...

  8. strcat strcpy 使用出现的问题汇总

    事例1(转)  在程序中多次用的strcat函数,但是有时候编译通过,但是执行时却出现了错误.为了进一步了解strcat函数的使用,我首先写了这样的一个测试程序: main(){       char ...

  9. string.h文件中函数用法

    下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source) ...

随机推荐

  1. vue2.0插件--loading

    loading效果很常见,常见到我们任何一个项目中,都可以见到他的身影.今天就以loading作为切入口,唠叨一下vuejs的插件的写法. 看vuejs官方文档关于插件的说明,关于使用插件和写插件,V ...

  2. RobotFramework - AppiumLibrary 之关键字Open Application使用

  3. 微信公众号openid处理的一些笔记

    每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同.如果公司有多个公众号,可以通过开放平台关联,这样同一用户,对同一个微信开放平台下的不同应用,unionid是相同 ...

  4. Android 开发 记录一个DP、PX、SP转换工具类

    public class UnitConversionUtil { /** * 根据手机分辨率从DP转成PX * @param context * @param dpValue * @return * ...

  5. [UnityShader基础]08.UI-Default.shader

    参考链接: https://zhuanlan.zhihu.com/p/32561155 https://blog.csdn.net/WuShangLZ/article/details/80401441 ...

  6. mysql 动态行转列

    表结果:create table user( id int , username ), create_time datetime, type int ) insert into user (`id`, ...

  7. 【C语言基础】循环体系

    1.For循环结构: For循环的一般形式为: for (表达式1 初始化:判断条件:自增自减) { 语句块 } 2.while循环结构: while循环的一般的形式为: 表达式1 初始化 while ...

  8. 深入理解Java虚拟机读书笔记3----类文件结构

    三 类文件结构 1 Java虚拟机的两种中立特性     · 平台无关性     · 语言无关性     实现平台无关性和语言无关性的基础是虚拟机和字节码存储格式(Class文件).   2 Clas ...

  9. win10基础上安装linux系统,添加双系统启动项

    1. 本机安装Centos7mini(注意点:进入安装界面先修改下面的内容,修改为U盘名称) 2. 配置文件/boot/grub2/grub.cfg,完成双系统启动设置. 3. 配置ip地址 nmcl ...

  10. PyCharm 服务器激活地址

    http://www.cnblogs.com/littlehb/p/7784517.html