gpt4 book ai didi

c - 如何缩短作为指向指针的指针的字符串

转载 作者:行者123 更新时间:2023-11-30 15:20:11 24 4
gpt4 key购买 nike

我有一个字符串:char** s 。像这样:

void cad_rem(char **s, int p){

}

哪里s是我需要删除 <p> 中的一个字符的字符串位置。
如果p是字符串的最后一个字符-只是一个例子-,我只是做了一个:

更新

void cad_rem(char **s, int p){
size_t len = strlen(s);

if(!(p > len)){
memmove(s + p, s + p + 1, len - p);
}
}

最佳答案

正如所指出的,char ** 是一个指向 char * 的指针,而不是它本身是一个字符串,因此您必须取消引用它。但是,您的函数也可以直接处理 char *

这样的事情应该有效:

void cad_rem(char *s, size_t p)
{
size_t len = strlen(s);
if (p >= len) {
/* put code here to error out and return */
}

要移动剩余的字符,请使用memmove。来自 the memmove man page :

void *memmove(void *dest, const void *src, size_t n);

[...] The memmove() function copies n bytes from memory area src to memory area dest.

这也可以轻松修改以删除多个字符。

    memmove(s + p, s + p + 1, len - p);
}

这会将字符串的剩余字节(包括终止符)从 s + p + 1(即从要删除的字符之后开始)移动到 s + p (即从该角色原来所在的位置开始)。

(len - plen - p - 1 + 1 相同,为位置 p 处的字符后一个字符code>,再加上一个作为尾随字符串终止符。)

如果您知道字符串的大小,则可以避免 strlen 调用,在这种情况下,删除最后一个字符只需用 '\0' 覆盖它即可>.

至于建议使用 realloc,请记住 C 字符串通常以 \0 字节终止。如果您正在处理普通的 C 字符串(并且根据您对 strlen 的使用,您看起来确实如此),则需要确保仍然有一个 \0在字符串的末尾 - 然后,realloc 甚至不是必需的。

关于c - 如何缩短作为指向指针的指针的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com