加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:25:16 所属栏目:百科 来源:网络整理
导读:是否有任何C函数从char *中删除第N个元素(将char *视为数组)? 例: char * tab – | 5 | 4 | 5 | 1 | 8 | 3 | remove_elt(tab,3) – 5 | 4 | 5 | 6 | 3 | 解决方法 提出的问题有点不清楚.你建议它不是一个字符串,但你没有在你想象的函数调用中指定数组大小.
是否有任何C函数从char *中删除第N个元素(将char *视为数组)?

例:

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

remove_elt(tab,3) – > 5 | 4 | 5 | 6 | 3 |

解决方法

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

该答案的改进版本会识别出您不需要调用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 );
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读