原型:

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. jquery---筛选总结

    jQuery中筛选这块内容较多,就简单的说明一下说用方法和能有什么样效果,就不弄案例来说明了: 第一类:过滤 1.eq(index|-index) $("p").eq(1).css ...

  2. 2018-2019-2 20175328李欣颖实验二《Java面向对象程序设计》实验报告

    2018-2019-2 20175328李欣颖实验二<Java面向对象程序设计>实验报告 面向对象程序设计-1 用程序解决问题时,要会写三种码: 1.伪代码 此处百分制转五分制: 如果成绩 ...

  3. day73 Django框架之URL

    Django框架之url路由层一 Django数据库的一对多与多对多表的建立 一对多  publish_id的建立:publish=models.ForeignKey(to='Publish', to ...

  4. Python全栈开发记录_第十篇(反射及选课系统练习)

    反射机制:反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块中寻找指定函数,对其进行操作.也就是利用字符串的形式去对象(模块)中操作(查找or获取or删除or添加)成员,一种基于字符串的事件 ...

  5. [Unity优化]批处理03:静态批处理

    原理: 运行时,把需要进行静态批处理的网格合并到一个新的网格中.虽然只进行一次合并操作,但是会占用更多的内存来存储合并后的网格,并且被静态批处理的物体无法移动旋转缩放 要使用静态批处理,需要把Stat ...

  6. 7种清除浮动 (感觉br最好用然而我用的还是overflow)

    1.clear清除浮动(添加空div法) 在浮动元素下方添加空div,并给该元素写css样式: {clear:both;height:0;overflow:hidden;} 2.方法:给浮动元素父级设 ...

  7. laravel-- facade 实现CURD

    路由内需配置 Route::any('test1','StudentController@test1');原生CURD写法 public function test1() {// 查找// $stud ...

  8. Zabbix常见问题

    1.Q:  agent日志中出现“active check configuration update from [127.0.0.1:10051] started to fail (cannot co ...

  9. [记录] Vue中的dom操作

    使用过Vue的同学都应该有这样一个感觉,在vue中页面是基于数据驱动的,不需要我们自己操作dom,框架帮我们完成了这一步,事实上Vue官方也建议我们这样做 在绝大多数情况下是不需要操作dom就可以完成 ...

  10. centos7 设置nginx和php开机自启动

    nginx开机自启动 首先我是源码安装的,需要手动建立nginx.service服务文件 cd /lib/systemd/system touch nginx.service nginx.servic ...