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

[cpp] view plaincopyprint?
  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. }

转载于:https://www.cnblogs.com/wangluochong/p/4169727.html

【C语言学习笔记】字符串拼接的3种方法 .相关推荐

  1. C语言学习笔记---字符串拼接函数 strcat() 和 strncat()

    strcat()函数    strcat()函数主要用来拼接字符串,用于将一个字符串拼接到另一个字符串的后面.下面通过一个简单的例子来演示一下这个函数的使用方法. int main() {char s ...

  2. js 字符串拼接的4种方法

    一.使用连接符 + 把想要连接的字符串串起来 let shy = '帅哥' let a = '我是' + shy console.log(a) // 我是帅哥 二.模板字符串 模板字符串(templa ...

  3. C语言学习笔记之字符串拼接的2种方法

    1. 使用strcat进行字符串拼接 #include <stdio.h> #include <stdlib.h> #include <string.h>int m ...

  4. python关系运算符可以连续使用_python学习笔记-字符串拼接关系运算符逻辑运算符...

    #字符串拼接&关系运算符&逻辑运算符 print()函数 #print()函数输出时候,可以指定多个输出值之间的分隔符,参数sep='' 设置 print('a','b','c',se ...

  5. C语言学习笔记——字符串结束符\0

    C语言中的字符串结束符\0标志着字符串的结束,由编译器自己加上的,ASCII值为0,表示NULL,ASCII中有很多不可见字符由转义字符\和可见字符来标识的,当然可见字符也能用转义字符表示.

  6. ORACLE学习笔记-字符拼接中单引号输出方法

    oracle sql语句中拼接包含单引号的字符串有两种方法: 方法一: 四个单引号('''')可以返回一个单引号,前后两个是界定符,中间两个单引号是转移后的一个单引号,如: 方法二: 使用q'[ ]' ...

  7. Java字符串拼接的五种方法,哪种性能最好?

    作者 | 老坛酸菜WH 来源 | https://www.cnblogs.com/twzheng/p/5923642.html > 字符串拼接一般使用"+",但是" ...

  8. python 字符串拼接_Python字符串拼接的6种方法(转)

    add by zhj: 对于多行字符串连接,第6种连接方法很方便,连接时不会添加额外的空格. 1. 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此 ...

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

    字符串拼接方式 1.String中的 + 一,使用+拼接字符串在Java中,拼接字符串最简单的方式就是直接使用符号+来拼接.如:String s1 = "hello";String ...

最新文章

  1. echart x轴标签偏移_移动端H5页面滑动手势X轴实例
  2. dependent-name ‘xxx::yyy’ is parsed as a non-type, but instantiation yields a type
  3. 偏差、方差、贝叶斯误差
  4. Highcharts图表-ajax-获取json数据生成图表
  5. IDEA通过git怎么回滚到某个提交节点或某个版本
  6. AUTOSAR从入门到精通100讲(六)-AUTOSAR中的PostBuild Data Set Generation Phase
  7. android jpush json,发送了正确的JPush json却报1002
  8. 1558. 得到目标数组的最少函数调用次数 二进制|思维
  9. 手把手教你做用户画像
  10. 删除China Lucky系列病毒 后缀.evopro勒索病毒数据恢复方法,解密处理方式
  11. WinEdt编译重新生成PDF以及找到模板tex对应的论文树形结构
  12. 0框架前端-如何写垂侧边栏(Vertical Tabs)
  13. EXCEL中的数据分析—描述统计
  14. phpstudy php redis,phpstudy拓展redis
  15. pycharm interpreter invalid
  16. 不要走开,有足够多的理由持续关注下去
  17. 服务器主板内存频率修改,小白也能玩超频 手把手教你将内存频率提升1100MHz
  18. 如何升级dart sdk以及choco不是内部或外部命令
  19. 使用HTML+CSS技术制作篮球明星介绍网站
  20. 孤岛危机简体中文版 机器人_孤岛危机系列1-3合集|孤岛危机游戏全系列1-3合集简体中文版_ - 极光下载站...

热门文章

  1. stm32 独立看门狗学习
  2. 浅谈单片机中变量访问的互斥
  3. 搞懂正则表达式之进阶篇
  4. MQTT再学习 -- 漫谈MQTT协议
  5. PS菜鸟入门 -- 添加滤镜
  6. Android开发:操作UI线程4种方法
  7. 【译】Notes on Blockchain Governance
  8. 【译】What is a UTXO, and how does it work for a blockchain ledger?
  9. 使用TensorFlow训练WDL模型性能问题定位与调优
  10. 如何玩转网络安全下的深度学习?最全的学习资料清单看这里