Append Char To String in C?

前端 未结 9 1127
滥情空心
滥情空心 2020-11-27 16:17

How do I append a single char to a string in C?

i.e

char* str = \"blablabla\";
char c = \'H\';
str_append(str,c); /* blablablaH */
9条回答
  •  鱼传尺愫
    2020-11-27 16:26

    Create a new string (string + char)

    #include     
    #include 
    
    #define ERR_MESSAGE__NO_MEM "Not enough memory!"
    #define allocator(element, type) _allocator(element, sizeof(type))
    
    /** Allocator function (safe alloc) */
    void *_allocator(size_t element, size_t typeSize)
    {
        void *ptr = NULL;
        /* check alloc */
        if( (ptr = calloc(element, typeSize)) == NULL)
        {printf(ERR_MESSAGE__NO_MEM); exit(1);}
        /* return pointer */
        return ptr;
    }
    
    /** Append function (safe mode) */
    char *append(const char *input, const char c)
    {
        char *newString, *ptr;
    
        /* alloc */
        newString = allocator((strlen(input) + 2), char);
        /* Copy old string in new (with pointer) */
        ptr = newString;
        for(; *input; input++) {*ptr = *input; ptr++;}
        /* Copy char at end */
        *ptr = c;
        /* return new string (for dealloc use free().) */
        return newString;
    }
    
    /** Program main */
    int main (int argc, const char *argv[])
    {
        char *input = "Ciao Mondo"; // i am italian :), this is "Hello World"
        char c = '!';
        char *newString;
    
        newString = append(input, c);
        printf("%s\n",newString);
        /* dealloc */
        free(newString);
        newString = NULL;
    
        exit(0);
    }
    
                  0   1   2   3    4    5   6   7   8   9  10   11
    newString is [C] [i] [a] [o] [\32] [M] [o] [n] [d] [o] [!] [\0]
    

    Don't alter the array size ([len +1], etc.) without know its exact size, it may damage other data. alloc an array with the new size and put the old data inside instead, remember that, for a char array, the last value must be \0; calloc() sets all values to \0, which is excellent for char arrays.

    I hope this helps.

提交回复
热议问题