gpt4 book ai didi

c - 指针字符串

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:01 24 4
gpt4 key购买 nike

在正确的地方复制,但在达到计数后不会停止。我认为我的代码应该按如下方式工作

char har *orig, int start, int count, char *final);

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

printf("%s\n",GetSubstring(source, 4, 3, result));

return 0;
}

char r *orig, int start, int count, char *final)
{
char *temp = (char *)orig;

final = temp;


}

for ( ; *temp && (count > 0) ; count--)
{
rn final;
}

最佳答案

  1. 第一个 for 循环不检查 temp 数组是否存在(它如何在不以某种方式询问内存管理器的情况下检查分配的内存是否存在?!)。 temp 只是一个指针。您要检查的是 orig 字符串在第一个 start 字节中没有零。没关系,也许这就是你所说的“存在”的意思。

  2. 您的意图是从 orig 复制到 final,但您将 final 重置为 orig . 这就是您的错误所在。您必须删除该行才能解决问题。

  3. 您不需要创建temp 指针,您可以使用orig 指针。您可以随意修改它——请记住,函数参数实际上是局部变量。 C 中的函数参数是按值传递的,您通过将指针(它们是值!)传递给数据来实现按引用传递。

也许我应该补充一点,这个功能的前提有些破损。它“有效”,但这并不是人们合理期望的。特别是:

  1. 没有迹象表明源字符串比 start 短。

  2. 没有迹象表明源字符串比 start + count 短。

    也许这些都可以,但在这些条件可能是错误的情况下,函数的用户应该可以得到它的指示。来电者会知道什么是预期的,什么不是,所以来电者可以确定它只要您向来电者提供一些反馈

  3. 您正在返回输出末尾后的位置——超过零终止。那不是很方便。如果要使用返回值连接后续字符串,则必须先将其递减 1。

下面是固定代码,带有合理命名的变量。

char *GetSub(const char *src, int start, int count, char *dst)
{
for ( ; *src && (start > 0) ; start--)
{
src++; /* Note: *src++ works too, but is pointless */
}

for ( ; *src && (count > 0) ; count--)
{
*dst++ = *src++;
}

*dst++ = 0;
return dst; /* Notice: This returns a pointer to the end of the
memory block you just wrote. Is this intentional? */
}

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

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