C++函数中类型错误的值总是空的
我必须经常做我的工作。我不能使用标准图书馆 我的cpy,我的len和我的strdup函数在这里。请帮我查一下。我认为这很容易,但我对这个函数有一个问题。我在这一页的末尾显示了错误。我认为这是清楚的。此外,这是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++; }
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];