任务应该很简单,删除第一个和最后一个字符。
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)
在此先感谢您的帮助 :)
这样做时:
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.