-3

私は常に自分の機能を実行する必要があります。標準ライブラリを使用できません。

ここに 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 です。

4

1 に答える 1

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()butを呼び出さないことを確認する必要がありますdelete[]

于 2017-01-03T15:01:19.430 に答える