gpt4 book ai didi

c - 指针子串数组

转载 作者:行者123 更新时间:2023-11-30 19:23:28 25 4
gpt4 key购买 nike

我正在尝试使用指针将字符串的一部分复制到另一个字符串。我生成的字符串开始在正确的位置复制,尽管它在超过计数后不会停止。此外,该字符串不是从源字符串复制的,而是从结果参数复制的

#include <stdio.h>

char *getSub(const char *orig, int start, int count, char *res);

int main(void)
{
const char orig[] = "one two three";
char res[] = "123456789012345678";

printf("%s\n",getSub(orig, 4, 3, res));

return 0;
}

char *getSub(const char *orig, int start, int count, char *res)
{
const char *sCopy = orig;

while (*orig)
{
if (start >= (orig - sCopy)) && (res-sCopy < count))
{
*res++ = *orig++;
}
else
*orig++;
}

return res;
}

最佳答案

最大的错误是您正在计算两个不相关的指针的差异,res - sCopy(我想sourceCopy也是sCopy在真实代码中,或者反之亦然)。仅当两个指针都指向同一数组(或指向同一数组的末尾)时,计算指针的差异才有意义。如前所述,是否复制任何内容取决于两个数组的任意位置。

        if (start >= (orig - sourceCopy)) && (res-sCopy < c))
{
*res++ = *orig++;
}
else
*orig++;

无论如何,这并没有计算复制了多少个字符(如果有的话)。

另一个错误是您没有以 0 终止副本。

正确的实现是

char *getSub(const char *orig, int start, int count, char *res)
{
char *from = orig, *to = res;
// check whether the starting position is within orig
for( ; start > 0; --start, ++from)
{
if (*from == 0)
{
res[0] = 0;
return res;
}
}
// copy up to count characters from from to to
for( ; count > 0 && *from; --count)
{
*to++ = *from++;
}
// 0-terminate
*to = 0;
// return start of copy, change to return to if end should be returned
return res;
}

关于c - 指针子串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713699/

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