您还没有真正说出“有效”的含义,但我假设您很困惑为什么dest
没有在调用函数中更改为新内存。
原因是在您的mystringcopy
函数中,参数dest
是调用函数中指针的副本。dest
然后,您将该副本分配给新缓冲区,进行复制,然后副本消失。原件不变。您需要dest
作为指针传递(指向指针)。
另外,我假设您是从内存中编写的,因为它不应该按原样编译(调用函数中的错误取消引用)。这是固定代码:
char *src, *dest;
src = (char *)malloc(BUFFSIZE); // no dereference on src, it's a pointer
//Do something to fill the src
mystringcpy(src, strlen(src), &dest); // pass the address of dest
// take a pointer to a char*
void mystringcopy(char *src, size_t length, char **dest) {
// now you should dereference dest, to assign to
// the char* that was passed in
*dest = (char *)malloc(length + 1);
// for simplicity, make an auxiliary dest
char* destAux = *dest;
// and now the code is the same
for(; (*destAux = *src) != '\0'; ++src, ++destAux);
}
另一种方法是返回dest
指针:
char *src, *dest;
src = (char *)malloc(BUFFSIZE);
//Do something to fill the src
dest = mystringcpy(src, strlen(src)); // assign dest
char* mystringcopy(char *src, size_t length) {
char* dest = (char *)malloc(length + 1);
// for simplicity, make an auxiliary dest
char* destAux = dest;
for(; (*destAux = *src) != '\0'; ++src, ++destAux);
return dest; // give it back
}
请记住,如果长度小于源缓冲区的实际长度,您将超出目标缓冲区。请参阅评论以获取解决方案,尽管这取决于您。