昨天晚上和@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. huhamhire-hosts — Hosts文件自动配置工具

    https://www.anotherhome.net/1376 推荐配合EasyGoAgent使用: EasyGoAgent — 开箱即用的GoAgent Update 2015.5.15 数据文件 ...

  2. P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 解题报告

    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 题意 给一个字符串,每次可以从两边中的一边取一个字符,要求取出的字符串字典序最小 可以Hash+二分 也可以S ...

  3. java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误

    情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...

  4. Android Studio 创建/打开项目时一直处于Building“project name”Gradle project info 的解决

    最近发现新版的AS,IDEA毛病不断,而且gradle的更新又给墙了,无奈啊! 进入类似如下的目录,发现如果没有对应的gradle解压文件,则在gradle官网下载完整压缩包,放入类似55xxxx串号 ...

  5. C#线程篇---解答线程之惑(2)

    我们都知道,在这个行业,追求的就是用最少的时间学最多的知识,这是我写这个系列最想达到的目标,在最快的时间内,帮助更多的人学习更多的线程知识. 前一篇,讲述了线程基础,给大家铺垫了一个基础,这一篇着重介 ...

  6. ssh或scp自动化问题

    http://note.youdao.com/noteshare?id=1ac4cb9469f818dbe579d721aae4e914

  7. 题解【bzoj2733 [HNOI2012]永无乡】

    Descriprition 两种操作 把两个集合并起来 求一个集合中的第 \(k\) 大(的编号) \(n \leq 10^5\) Solution 平衡树的板子题之一 维护两个点连不连通直接并查集 ...

  8. python pip安装--不是内部或外部命令--解决方案

    首先在 命令行中输入 python -m ensurepip 创建出pip3.exe  , 并找到pip3.exe所在的Scripts路径 使命令行在Scripts路径下 输入pip3 install ...

  9. C++ 注册表编程

    原文 C++ 注册表编程 1.基础知识 注册表的组织方式跟文件目录比较相似,主要分为根键.子键和键值项三部分,与文件目录对应的话就是根目录.子目录和文件.分别介绍一下这三部分: (1)根键.分为5个, ...

  10. Java基础-方法(method)的应用

    Java基础-方法(method)的应用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 方法就是定义在类中,具有特定功能的一段小程序,方法也称为函数(function),方法可以接 ...