任务应该很简单,删除第一个和最后一个字符。
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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句