我在这里有一个菜鸟问题,无法理解这里出了什么问题。我在这里有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void copyFrom(char * mStr, char * str);


int main() {

    char * srcStr = "Robert bought a good ford car";
    char * dstStr = NULL;
    copyFrom(srcStr, dstStr);
    printf("The string copied here is %s", dstStr);
    return 0;
}
void copyFrom(char * str, char * mStr)
{
    if(!mStr) {
        mStr = (char *)malloc((strlen(str)) + 1);
        if(mStr == NULL)
            return;
    }

    while(*mStr++ = *str++) {
        ;
    }

    mStr[strlen(str)] = '\0';
}

这不会复制字符串,但是如果使用数组代替dstStr的char指针,则一切正常。

你能告诉我这是怎么回事吗?

最佳答案

分配mStr之后,需要返回mStr的值。现在,当您退出函数时,malloc的返回值和指向字符串副本的指针将消失。它会从malloc泄漏内存,因为它无法对其进行跟踪。

将您的函数更改为char* copyFrom(const char * str)
然后从该函数返回mStr。然后你可以写dstStr = copyFrom(srcStr)
现在,POSIX C已经具有此功能。它称为strdup

10-07 14:48