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
,你需要要么
否则,您可以在调用方 (main()
) 函数中为 dst
分配内存,然后将已分配的 dst
传递给您执行复制作业的功能。恕我直言,这种方法与库函数 strcpy()
更相似,因为 API 本身不处理目标的内存分配。
注意::也就是说,在代码中
int len = strlen(src) - 1;
您遇到了逻辑错误。应该是
int len = strlen(src) + 1;
也累积终止空值。
我是一名优秀的程序员,十分优秀!