gpt4 book ai didi

c - 返回一个新的动态分配的 C 字符串,其中包含 s 中从第一个字符开始的每隔一个字符

转载 作者:行者123 更新时间:2023-11-30 18:30:13 26 4
gpt4 key购买 nike

这是我的代码,我想我几乎得到了,但有一些小错误

char* skipping(const char *s) {
int length = strlen(s);
int newLength = length/2 + length%2;
int pointers = 0;
char* buff = malloc(newLength + 1);

for ( int i = 0; i < length; i++ ){
if (i%2 == 0){
buff[pointers] = s[i];
pointers++;
}
}
return buff;
buff[pointers] = '\0';

}

int main()
{
char* s = skipping("0123456789");
printf("%s\n", s);
free(s);
}

我期望 02468,但我得到的是 02468\x93\xd7。我不明白发生了什么事。任何建议将不胜感激:)。

最佳答案

返回后关闭缓冲区:

return buff;
buff[pointers] = '\0';

应该是:

buff[pointers] = '\0'; 
return buff;

肯定有一些编译器警告,但您忽略了它们。

还要考虑简化您的代码。研究这个:

char *skipping(const char *s)
{
int length = strlen(s);
char *buff = malloc(length/2 + 1);

int pointers = 0;

for (int i = 0; i < length; i+=2)
{
buff[pointers] = s[i];
pointers++;
}
buff[pointers] = '\0';
return buff;
}

int main()
{
char *s = skipping("0123456789");
printf("%s\n", s);
free(s);
}

关于c - 返回一个新的动态分配的 C 字符串,其中包含 s 中从第一个字符开始的每隔一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com