当前位置: 首页 > Database, postgresql > 正文

一则C语言合并字符串的示例

这里列举出一则postgresql在 进行嵌入式 sql 语法分析时使用的字符串处理技巧。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdarg.h>

    void *
    mm_alloc(size_t size)
    {
        void       *ptr = malloc(size);

        if (ptr == NULL){
		    fprintf(stderr, "out of memory\n");
		    exit(1);
	    }

        return ptr;
    }

    static char *
    cat2_str(char *str1, char *str2)
    {
        char * res_str  = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2);

        strcpy(res_str, str1);
        if (strlen(str1) != 0 && strlen(str2) != 0)
            strcat(res_str, " ");
        strcat(res_str, str2);

        return(res_str);
    }

    static char *
    cat_str(int count, ...)
    {
        va_list     args;
        int         i;
        char        *res_str;

        va_start(args, count);

        res_str = va_arg(args, char *);

        /* now add all other strings */
        for (i = 1; i < count; i++)
            res_str = cat2_str(res_str, va_arg(args, char *));

        va_end(args);

        return(res_str);
    }

    main(){
        char * a = cat_str(2, "xxx1", "xxx2");
        printf("%s\n", a); 
        free(a);

        a = cat_str(6, "xxx1", "xxx2", "xxx3", "xxx4", "xxx5", "xxx6");
        printf("%s\n", a); 
        free(a);
    }

例子中,cat_str函数实现了合并任意多个字符串的强大功能,当然,存在内存泄露的问题。
但是相对于嵌入式SQL环境中词法分析功能来说,这点泄露的内存可以忽略不计。
运行结果如下:

    xxx1 xxx2
    xxx1 xxx2 xxx3 xxx4 xxx5 xxx6
    分享到:

本文固定链接: http://klwang.info/a-use-case-of-strcat/ | 数据库|Linux|软件开发

该日志由 klwang 于2014年02月22日发表在 Database, postgresql 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 一则C语言合并字符串的示例 | 数据库|Linux|软件开发

一则C语言合并字符串的示例:等您坐沙发呢!

发表评论

*
快捷键:Ctrl+Enter