昨天晚上和@buptpatriot讨论函数返回指针(malloc生成的)的问题,提到字符串拼接,做个总结。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. char *join1(char *, char*);
  5. void join2(char *, char *);
  6. char *join3(char *, char*);
  7. int main(void) {
  8. char a[4] = "abc"; // char *a = "abc"
  9. char b[4] = "def"; // char *b = "def"
  10. char *c = join3(a, b);
  11. printf("Concatenated String is %s\n", c);
  12. free(c);
  13. c = NULL;
  14. return 0;
  15. }
  16. /*方法一,不改变字符串a,b, 通过malloc,生成第三个字符串c, 返回局部指针变量*/
  17. char *join1(char *a, char *b) {
  18. char *c = (char *) malloc(strlen(a) + strlen(b) + 1); //局部变量,用malloc申请内存
  19. if (c == NULL) exit (1);
  20. char *tempc = c; //把首地址存下来
  21. while (*a != '\0') {
  22. *c++ = *a++;
  23. }
  24. while ((*c++ = *b++) != '\0') {
  25. ;
  26. }
  27. //注意,此时指针c已经指向拼接之后的字符串的结尾'\0' !
  28. return tempc;//返回值是局部malloc申请的指针变量,需在函数调用结束后free之
  29. }
  30. /*方法二,直接改掉字符串a,*/
  31. void join2(char *a, char *b) {
  32. //注意,如果在main函数里a,b定义的是字符串常量(如下):
  33. //char *a = "abc";
  34. //char *b = "def";
  35. //那么join2是行不通的。
  36. //必须这样定义:
  37. //char a[4] = "abc";
  38. //char b[4] = "def";
  39. while (*a != '\0') {
  40. a++;
  41. }
  42. while ((*a++ = *b++) != '\0') {
  43. ;
  44. }
  45. }
  46. /*方法三,调用C库函数,*/
  47. char* join3(char *s1, char *s2)
  48. {
  49. char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator
  50. //in real code you would check for errors in malloc here
  51. if (result == NULL) exit (1);
  52. strcpy(result, s1);
  53. strcat(result, s2);
  54. return result;
  55. }

【C语言学习笔记】字符串拼接的3种方法 .的更多相关文章

  1. Js 字符串拼接的两种方法

    字符串拼接的两种方法 用数组的方法的好处是:避免变量重新定义.赋值 <!DOCTYPE html> <html lang="en"> <head> ...

  2. C语言学习笔记之字符串拼接的2种方法——strcat、sprintf

    本文为原创文章,转载请标明出处 1. 使用strcat进行字符串拼接 #include <stdio.h> #include <stdlib.h> #include <s ...

  3. C语言学习笔记--字符串

    字符串是有序字符的集合,C 语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以'\0'结尾的字符数组. 1.字符数组与字符串 (1)在 C 语言中,字双引号引用的单个或多个字符是一种特殊的 ...

  4. Python字符串拼接的6种方法(转)

    add by zhj: 对于多行字符串连接,第6种连接方法很方便,连接时不会添加额外的空格. 原文:http://www.cnblogs.com/bigtreei/p/7892113.html 1. ...

  5. Python字符串拼接的6种方法

    如有其他字符串拼接方法 欢迎留言提出哦 (示例版本为Py2) 1. 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用 “+” 来连接两个字符串 ...

  6. C#学习笔记(12)——三种方法操作XML

    说明(2017-7-11 16:56:13): 原文地址: C#中常用的几种读取XML文件的方法 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web. ...

  7. Python中字符串拼接的N种方法

    python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!'print(s) 输出结果:Hello World! 使用这种方式进行字符 ...

  8. 关于python字符串拼接的几种方法

    当时看完python的基本语法后 给朋友写了个美元概率换算 写完后拼接结果时候 发现压根不知道python怎么拼接字符串 看了些资料自己做了个总结 首先就是和JavaScript一样的拼接方式 nam ...

  9. C语言学习笔记--字符串函数

    字符串函数 需要包含头文件#include<stdio.h> strlen strcmp strcpy strchr strstr strcasestr

随机推荐

  1. BZOJ2217 [Poi2011]Lollipop 【贪心】

    题目链接 BZOJ2217 题解 如果只判定存不存在方案的话,我倒是想到可以将\(2\)拆成两个\(1\),其中一个不能作为区间开头,线段树优化计算补集方案数 但是一看这道题要输出方案啊,,, 怎么办 ...

  2. java多线程 -- ForkJoinPool 分支/ 合并框架 工作窃取

    Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总. Fork/Join 框架与线程池的 ...

  3. Jenkins(一)---我理解的jenkins是这样的

    1.齿轮 如果将 java / maven / ant / git / tomcat / jenkins 等等软件比喻为齿轮:如下图 两个软件在一起可以驱动另外一个软件:如下图 如果把这些软件要集成在 ...

  4. 仿微博的JQuery日历控件

    实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 日历控件网上一搜一大把,但是我觉得自己写一遍还是有好处的.代码可以查看本页源代 ...

  5. opencv imread值为空

    调试程序错误如下: 此时test.jpg文件放在了sln解决方案文件夹内,并没有放在proj项目文件夹内,放到项目文件夹下后,调试如下图 这时候img就读取到图像了,最终显示图像如下,显示的很大,再研 ...

  6. const引用与非const引用

    void print1(int a) { cout<<a<<endl; } void print2(const int& a) { cout<<a<& ...

  7. C++持有Object-C对象时容易内存泄露

    在IOS项目中,可以将C++与Object-C混编,不过必须放在实现文件.mm中. 在.mm中,我们可能创建了一个C++对象A,而它持有一个Object-C对象B作为成员变量.当A对象被释放掉的时候, ...

  8. python---基础知识回顾(五)(python2.7和python3.5中的编码)

    Unicode 和 UTF-8 有何区别? python基础之字符编码 以上两篇看懂即可,那下面的就不需要看了 python标准数据类型 Bytes python--数据类型bytes Python ...

  9. python---基础知识回顾(十)进程和线程(多线程)

    前戏:多线程了解 使用多线程处理技术,可以有效的实现程序并发,优化处理能力.虽然进程也可以在独立的内存空间并发执行,但是生成一个新的进程必须为其分配独立的地址空间,并维护其代码段,堆栈段和数据段等,这 ...

  10. 终于把5GB的Cygwin安装完成了

    From:http://www.cnblogs.com/killerlegend/p/3904478.html Author:KillerLegend Date:2014.8.11 首先,只想说一句, ...