C++函数中类型错误的值总是空的

C++函数中类型错误的值总是空的,c++,function,void,strdup,C++,Function,Void,Strdup,我必须经常做我的工作。我不能使用标准图书馆 我的cpy,我的len和我的strdup函数在这里。请帮我查一下。我认为这很容易,但我对这个函数有一个问题。我在这一页的末尾显示了错误。我认为这是清楚的。此外,这是C++ 非常感谢 代码: void my_cpy(char* dest, const char* src) { int i = 0; while (src[i] != '\0') { dest[i] = src[i]; i++; }

我必须经常做我的工作。我不能使用标准图书馆

我的cpy,我的len和我的strdup函数在这里。请帮我查一下。我认为这很容易,但我对这个函数有一个问题。我在这一页的末尾显示了错误。我认为这是清楚的。此外,这是C++

非常感谢

代码:

void my_cpy(char* dest, const char* src) {

    int i = 0;
    while (src[i] != '\0') {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';
}

int my_len(const char* p) {

    int c = 0;
    while (*p != '\0')
    {
        c++;
        *p++;
    }
    return c;
}

char *my_strdup(const char *s) {
    char* d = malloc(my_len(s) + 1);    // Space for length + null
    if (d == NULL) return NULL;         //No memory
    my_cpy(d, s);                       // Copy the characters
    return d;                           // Return the new string
}
我在这个函数上有错误。我怎样才能解决这个问题

激活错误类型为void*的值不能用于初始化 char类型的实体*

`Error    C2440   'initializing': cannot convert from 'void *' to 'char *'`
我写道:

但现在问题出在p上。总是空的

malloc正在返回void*type。在C++中,它不需要被强制转换,但是在C++中,它需要被明确地显示:

char* d = static_cast<char*>(malloc(my_len(s) + 1));

但是,在这种情况下,您需要确保函数的客户端不会调用免费,但是Dele[]]/P>是C还是C++?这是C++。也许以后我会用它C@UgurBaki这可能是C++的语法,但它在风格上肯定不是C++。为什么要尝试模拟strdup之类的函数?std::string有什么问题,或者如果您想学习一些东西,创建自己的string类?是的,这是我的规则。我写得很大胆。但现在问题出在p上。我如何解决这个空问题?谢谢,请不要破坏帖子。static_cast和C cast是一样的。不,不是。C风格的强制转换比静态强制转换强大得多。是的,好吧,我说的是,在这种情况下,这是一样的。@nikau:是的,但更喜欢静态强制转换,因为如果你犯了一个错误,比如试图丢弃常量,或者在不相关的类型之间进行强制转换,那么你很可能会得到一个编译器错误。

char* d = static_cast<char*>(malloc(my_len(s) + 1));
char* d = new[my_len(s) + 1];