打印

关于C语言字符串拼接的几个方法!

[复制链接]
1712|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
東南博士|  楼主 | 2015-9-20 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dirtwillfly 于 2015-9-21 08:34 编辑

字符串拼接的3种方法
1
  • #include<stdio.h>  
  • #include<stdlib.h>  
  • #include<string.h>  
  •   
  • char *join1(char *, char*);  
  • void join2(char *, char *);  
  • char *join3(char *, char*);  
  •   
  • int main(void) {  
  •     char a[4] = "abc"; // char *a = "abc"  
  •     char b[4] = "def"; // char *b = "def"  
  •   
  •     char *c = join3(a, b);  
  •     printf("Concatenated String is %s\n", c);  
  •   
  •     free(c);  
  •     c = NULL;  
  •   
  •     return 0;  
  • }  
  •   
  • /*方法一,不改变字符串a,b, 通过malloc,生成第三个字符串c, 返回局部指针变量*/  
  • char *join1(char *a, char *b) {  
  •     char *c = (char *) malloc(strlen(a) + strlen(b) + 1); //局部变量,用malloc申请内存  
  •     if (c == NULL) exit (1);  
  •     char *tempc = c; //把首地址存下来  
  •     while (*a != '\0') {  
  •         *c++ = *a++;  
  •     }  
  •     while ((*c++ = *b++) != '\0') {  
  •         ;  
  •     }  
  •     //注意,此时指针c已经指向拼接之后的字符串的结尾'\0' !  
  •     return tempc;//返回值是局部malloc申请的指针变量,需在函数调用结束后free之  
  • }  

相关帖子

沙发
東南博士|  楼主 | 2015-9-20 14:19 | 只看该作者
/*方法二,直接改掉字符串a, 此方法有误,见留言板*/  
void join2(char *a, char *b) {  
    //注意,如果在main函数里a,b定义的是字符串常量(如下):  
    //char *a = "abc";  
    //char *b = "def";  
    //那么join2是行不通的。  
    //必须这样定义:  
    //char a[4] = "abc";  
    //char b[4] = "def";  
    while (*a != '\0') {  
        a++;  
    }  
    while ((*a++ = *b++) != '\0') {  
        ;  
    }  
}  

使用特权

评论回复
板凳
東南博士|  楼主 | 2015-9-20 14:20 | 只看该作者
/*方法三,调用C库函数,*/  
char* join3(char *s1, char *s2)  
{  
    char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator  
    //in real code you would check for errors in malloc here  
    if (result == NULL) exit (1);  
  
    strcpy(result, s1);  
    strcat(result, s2);  
  
    return result;  
}  

使用特权

评论回复
地板
zhangbo1985| | 2015-9-20 21:42 | 只看该作者
这三个函数简洁易用,值得推广。

使用特权

评论回复
5
dirtwillfly| | 2015-9-21 08:34 | 只看该作者
感谢分享

使用特权

评论回复
6
東南博士|  楼主 | 2015-9-25 14:41 | 只看该作者
简洁易用,尤其是是串口解析的时候。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

367

主题

6048

帖子

34

粉丝