从数组中删除第n个元素(char*)

Jos*_*rad 4 c arrays

是否有任何C函数从char*中删除第N个元素(将char*视为数组)?

例:

char* tab --> |5|4|5|1|8|3|

remove_elt(tab, 3) --> 5|4|5|8|3|

pad*_*ddy 8

提出的问题有点不清楚.你建议它不是一个字符串,但你没有在你想象的函数调用中指定数组大小.这将导致当前的答案将数据视为以null结尾的字符串.

该答案的改进版本将识别您无需致电strlen:

void remove_elt(char *str, int i)
{
    for(; str[i]; i++) str[i] = str[i+1];
}
Run Code Online (Sandbox Code Playgroud)

但如果它是一个存储大小的数组(而不是0用作结束标记),那么您需要为您的函数提供该大小.在这种情况下,您可以使用memmove哪个可以复制重叠的内存:

void remove_elt( char *str, int elem, int *size )
{
    if( elem < --*size ) {
        memmove( &str[elem], &str[elem + 1], *size - elem );
    }
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*lia 6

你可以做一个:

void remove_elt(char *str, int i) {
    int len = strlen(str);

    for (; i < len - 1 ; i++)
    {
       str[i] = str[i+1];
    }

    str[i] = '\0';
}
Run Code Online (Sandbox Code Playgroud)