【问题标题】:Value of type error in C++ function always NULL [duplicate]C ++函数中类型错误的值始终为NULL [重复]
【发布时间】:2017-05-17 16:33:19
【问题描述】:

我必须一直做我的工作。我不能使用标准库。

My_cpy , my_len 和 my_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 *'`

我写的:

char* d = (char*) malloc(my_len(s) + 1)

但现在 p 上的问题。始终为 NULL。

【问题讨论】:

  • 这是 C 还是 C++?
  • 这是 C++ 。也许以后我会在 C 中使用
  • @UgurBaki 这在语法上可能是 C++,但在风格上肯定不是 C++。你为什么要模仿 strdup 这样的函数? std::string 有什么问题,或者如果你想学习一些东西,创建你自己的字符串类?
  • 是的,这是我的规则。我用粗体写。但现在p 出现问题。我该如何解决这个 NULL 问题?谢谢
  • 请不要破坏帖子。

标签: c++ function void strdup


【解决方案1】:

malloc() 正在返回 void * 类型。在 C 中不需要强制转换,但在 C++ 中需要显式强制转换:

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

(更喜欢 static_cast 而不是 C 风格的演员)

你也可以使用

char* d = new[my_len(s) + 1];

但在这种情况下,您需要确保函数的客户端不会调用free(),而是调用delete[]

【讨论】:

  • static_cast 与 C cast 相同。
  • 不,不是,@nikau。 C 风格的转换比 static_cast 强大得多。
  • 是的,我说的是,在这种情况下,是一样的。
  • @nikau:是的,但更喜欢static_cast,因为如果你犯了一个错误(比如试图抛弃 const-ness,或者在不相关的类型之间进行强制转换),你更有可能得到一个编译器错误。
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 2019-11-27
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
相关资源
最近更新 更多