Remove a substring in C given positions of substring

后端 未结 5 2056

Let\'s say I have a char *example that contains 20 chars. I want to remove every char from example[5] to example[10] and then fix up the a

5条回答
  •  佛祖请我去吃肉
    2021-01-29 00:21

    You can't use memcpy() reliably because there's overlap between the source and target; you can use memmove(). Since you know the lengths, you use:

    memmove(&example[5], &example[11], (20 - 11 + 1));
    

    Remember you need to copy the null terminator too.

    #include 
    #include 
    
    int main(void)
    {
        char array[] = "abcdefghijklmnopqrst";
        char *example = array;
        printf("%.2zu: <<%s>>\n", strlen(example), example);
        memmove(&example[5], &example[11], (20 - 11 + 1));
        printf("%.2zu: <<%s>>\n", strlen(example), example);
        return(0);
    }
    

    Compiled with a C99 compiler, that yields:

    20: <>
    14: <>
    

    If you have a C89 compiler (more specifically, C library), you'll have to worry about the z in the format string, which indicates a size_t argument. It's simplest to remove the z and cast the result of strlen() with (unsigned).

提交回复
热议问题