2017-01-03 7 views
-3

Я должен выполнять свою функцию всегда. Я не могу использовать стандартную библиотеку.Значение ошибки типа в функции C++ всегда NULL

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 
} 

У меня есть ошибки на этой функции. Как я могу решить эту проблему?

Error (активный) значение типа "пустота *" не может быть использована для инициализации сущности типа "символа *"

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

Я написал:

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

но сейчас проблема сверху p. Всегда NULL.

+0

Это C или C++? –

+0

Это C++. Может быть, позже я буду использовать в C –

+0

@UgurBaki Это может быть C++ с точки зрения синтаксиса, но это, конечно, не C++ с точки зрения стиля. Почему вы пытаетесь воспроизвести такую ​​функцию, как 'strdup'? Что случилось с 'std :: string', или если вы хотите что-то узнать, создав свой собственный класс строк? – PaulMcKenzie

ответ

0

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[].

+0

static_cast - это то же самое, что и C cast. – nikau6

+0

Нет, это не так, @nikau. Сцена C-стиля намного мощнее, чем static_cast. –

+0

Да, я сказал, что в этом случае это то же самое. – nikau6

 Смежные вопросы

  • Нет связанных вопросов^_^