昨天晚上和@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. [UVALive 3683] A Scheduling Problem

    图片加载可能有点慢,请跳过题面先看题解,谢谢 题目给出了一个信息:答案是有向边最长路 \(k\) 的值或者是 \(k+1\) 的值 那么题目就变成了:求是否有一种给无向边定向的方案,使得在以有向边最长 ...

  2. BZOJ3192:[JLOI2013]删除物品——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...

  3. Codeforces 633C Spy Syndrome 2 | Trie树裸题

    Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...

  4. 【Cf #449 C】Willem, Chtholly and Seniorious(set维护线段)

    这里介绍以个小$trick$,民间流传为$Old Driver Tree$,实质上就是$set$维护线段. 我们将所有连续一段权值相同的序列合并成一条线段,扔到$set$里去,于是$set$里的所有线 ...

  5. hdu6057 Kanade's convolution 【FWT】

    题目链接 hdu6057 题意 给出序列\(A[0...2^{m} - 1]\)和\(B[0...2^{m} - 1]\),求所有 \[C[k] = \sum\limits_{i \; and \; ...

  6. 那些ie6已支持的方法属性,成为事实标准。或者方便大家的api

    很多api,都是ie6实现,后来其他w3c或其他浏览器支持,或者用类似的方法模拟 onselectionchange  判断选区改变 ,chrome已支持 Element.contains   判断元 ...

  7. Centos Python3安装共存

    安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlit ...

  8. OpenCV入门指南----人脸检测

    本篇介绍图像处理与模式识别中最热门的一个领域——人脸检测(人脸识别).人脸检测可以说是学术界的宠儿,在不少EI,SCI高级别论文都能看到它的身影.甚至很多高校学生的毕业设计都会涉及到人脸检测.当然人脸 ...

  9. tp5.1 高级查询之 表里2字段比较大小

    $map = [ 'status' => 1, 'is_show' => 1,]; $result = Db::name('coupon') ->where($map) ->w ...

  10. Nginx记录-Nginx介绍

    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...