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

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;
}


在此先感谢您的帮助 :)

最佳答案

执行此操作时:

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

您正确地跳过了第一个和最后一个字符,但是最后得到的字符串没有NUL终止符(\0)。您应该在memmove之前或之后自行添加:
size_t len = strlen(src) - 2;
memmove(dst, src + 1, len);
dst[len] = '\0';

当然,以上所有代码均假定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;

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

关于c - 从字符串中删除第一个和最后一个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60010365/

10-12 17:31
查看更多