2017-01-03 7 views
-3

私は常に関数を実行する必要があります。standartライブラリは使用できません。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 
} 

私は、この機能にエラーが発生しています。どうすればこの問題を解決できますか?

:型の値

エラー(アクティブ) "void *型"

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

が、私はそれを書いた "* char型" タイプの実体 を初期化するために使用することはできません

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

ですが、現在問題があります。常に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)); 

(Cスタイルのキャストにstatic_castを好む)

あなたはまた、

char* d = new[my_len(s) + 1]; 
を使用することができます

しかし、その場合は、関数のクライアントがfree()ではなくdelete[]を呼び出さないようにする必要があります。

+0

static_castはCキャストと同じです。 – nikau6

+0

いいえ、@ニカウです。 Cスタイルのキャストは、static_castよりはるかに強力です。 –

+0

ええ、私が言ったことは、この場合、同じです。 – nikau6

関連する問題