从字符串中删除第一个和最后一个字符

mic*_*995 2 c c-strings

任务应该很简单,删除第一个和最后一个字符。

https://www.codewars.com/kata/56bc28ad5bdaeb48760009b0/train/c

该函数获取两个参数(dst作为目标和src源),并且应该返回一个修改后的字符串并分配给dst指针(如果我理解正确的话)。

我的答案在我看来是正确的,但这是我的问题:

当字符串超过 9 个字符时,修改后的字符串带有一些符号。

char* remove_char(char* dst, const char* src){

  memmove(dst,src+1,strlen(src+1)-1);


  return dst;
}

Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助 :)

Mar*_*lli 6

这样做时:

memmove(dst,src+1,strlen(src+1)-1);
Run Code Online (Sandbox Code Playgroud)

您正确地跳过了第一个和最后一个字符,但最终得到了一个没有 NUL 终止符 ( \0)的字符串。您应该在 之前或之后自行添加memmove

size_t len = strlen(src) - 2;
memmove(dst, src + 1, len);
dst[len] = '\0';
Run Code Online (Sandbox Code Playgroud)

当然,以上所有代码都假定dst已正确分配并且可以包含至少strlen(src) - 1字符并且src至少2具有字符。

如果您还想考虑src短于两个字符的边缘情况:

size_t len = strlen(src);

if (len < 2) {
    *dst = '\0';
} else {
    memmove(dst, src + 1, len - 2);
    dst[len - 2] = '\0';
}

return dst;
Run Code Online (Sandbox Code Playgroud)

注意:您可能必须#include <stddef.h>使用size_t.