gpt4 book ai didi

c - 使用我自己的 strcopy 函数时变空

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:14 25 4
gpt4 key购买 nike

void strcopy(char *src, char *dst) {
int len = strlen(src) - 1;
dst = (char*)malloc(len);
while(*src){
*dst = *src;
src++; dst++;
}
*dst = '\0';
}
int main() {
char *src = "hello";
char *dst = "";
strcopy(src, dst);
printf("strcpy:%s\n", dst);
return 0;
}

Output:
strcpy:

谁能解释一下我的 strcopy 函数有什么问题?但是,如果在 main 中执行 malloc,我得到的输出是正确的。困惑,因为 malloc 只在堆中分配内存吗?

最佳答案

在你的情况下,

  strcopy(src, dst);

dst 本身是按值传递的。您不能在函数内部分配内存并期望在调用函数中反射(reflect)相同的内存。

如果你想在 strcopy() 中将内存分配给 dst,你需要要么

  • 将指针传递给 dst

  • 或者您也可以从您的函数返回新分配的dst,并将其收集回调用方的dst

    但是,请记住,当您自己分配内存时,您有责任free() 它。

否则,您可以在调用方 (main()) 函数中为 dst 分配内存,然后将已分配的 dst 传递给您执行复制作业的功能。恕我直言,这种方法与库函数 strcpy() 更相似,因为 API 本身不处理目标的内存分配。


注意::也就是说,在代码中

 int len = strlen(src) - 1;

您遇到了逻辑错误。应该是

 int len = strlen(src) + 1;

也累积终止空值。

关于c - 使用我自己的 strcopy 函数时变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32070076/

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