任务应该很简单,删除第一个和最后一个字符。
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/