是否有任何C函数从char *中删除 N -th元素(将char *视为数组)?
示例:
char* tab --> |5|4|5|1|8|3|
remove_elt(tab, 3) --> 5|4|5|8|3|
答案 0 :(得分:7)
提出的问题有点不清楚。你建议它不是一个字符串,但你没有在你想象的函数调用中指定数组大小。这将导致当前的答案将数据视为以空字符结尾的字符串。
该答案的改进版本会识别您无需致电strlen
:
void remove_elt(char *str, int i)
{
for(; str[i]; i++) str[i] = str[i+1];
}
但如果它是一个存储大小的数组(而不是使用0
作为结束标记),那么您需要为您的函数提供该大小。在这种情况下,您可以使用memmove
来复制重叠的内存:
void remove_elt( char *str, int elem, int *size )
{
if( elem < --*size ) {
memmove( &str[elem], &str[elem + 1], *size - elem );
}
}
答案 1 :(得分:5)
你可以制作一个:
void remove_elt(char *str, int i) {
int len = strlen(str);
for (; i < len - 1 ; i++)
{
str[i] = str[i+1];
}
str[i] = '\0';
}