昨天晚上和@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. 洛谷 P4706 取石子 解题报告

    P4706 取石子 题目描述 现在 Yopilla 和 yww 要开始玩游戏! 他们在一条直线上标记了 \(n\) 个点,从左往右依次标号为 \(1, 2, ..., n\) .然后在每个点上放置一些 ...

  2. 洛谷 P1939 【模板】矩阵加速(数列) 解题报告

    P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值 ...

  3. RRDtool绘制lvs连接数图形

    需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker. RRD全称Round Robin Database,轮转数据库,也是一个时间序列 ...

  4. 解题:CQOI 2017 小Q的表格

    题面 首先观察$b*f(a,a+b)=(a+b)*f(a,b)$这个东西 可以化成$\frac{f(a,a+b)}{a+b}=\frac{f(a,b)}{b}$,发现这类似辗转相除求gcd 而我们两边 ...

  5. bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat

    noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...

  6. [POI2012]STU-Well

    题意翻译 给定一个非负整数序列A,每次操作可以选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max⁡(∣xi−xi−1∣)最小,输出这个最小值以及此时最小的k (1≤n≤1 000 ...

  7. 【线段树合并】【P2824】 [HEOI2016/TJOI2016]排序

    Description 给定一个长度为 \(n\) 的排列,有 \(m\) 次操作,每次选取一段局部进行升序或降序排序,问你一波操作后某个位置上的数字是几 Hint \(1~\leq~n,~m~\le ...

  8. supervisor "INFO spawnerr: unknown error making dispatchers for xxx" 错误

    查看 supervisor 的配置中,是否有受限的文件路径,如果有,则需要修改对应文件的权限

  9. awk 脚本同时解析多个文件

    ARGC        The number of command line arguments (does not include                   options to gawk ...

  10. c++操作mysql入门详解

    首先,根据你当前的操作系统,还有开发工具,选择相应的mysql版本.本人选择的环境是win10 + vs2013 需要解决三个问题:1.下载安装mysql服务器,并登录mysql测试一下是否安装成功: ...