0

C++ の学習を開始し、次のコードで部分文字列を実行する単純な関数を作成してみてください。

char* substring(int start, int end, const char* target)
{
    size_t length = strlen(target);

    char result[(length + 1)];

    int iterator = 0;

    for(int i = start; i < length; i++)
    {
        if(i <= end)
        {
            result[iterator] = target[i];

            iterator++;
        }
    }

    result[iterator] = '\0';

    cout << result << endl; // This give correct result "aya";

    return result;
}

これらの関数をメイン メソッドで使用すると、次のようになります。

int main(int argc, char** argv) {

    char some_text[] = "Saya Makan";

    char* sub = substring(1, 3, some_text); // No string returned

    cout << "Substring Result is: " << sub;

    return 0;
}

出力は次のようになります。

aya
Substring Result is: 
RUN SUCCESSFUL (total time: 44ms)

結果に見られるように、私の関数は空の文字列以外は何も返していませんが、戻り値の前にコード行があり、「結果」変数は結果を正しくエコーしました。私の関数内で何が起こっているのか説明していただけませんか?何か不足していますか?

4

1 に答える 1

4

関数を超えて存在する必要のないローカル配列へのポインターを返しています。

を使用して動的に割り当てることにより、関数の範囲を超えてバッファを永続化する必要がありますmallocfreeそしてもちろん後で覚えておいてください。

ああ、C++ に気付きました。
したがって、という考えを捨ててmallocfree単純にstd::stringand notを使用してくださいchar *

于 2012-12-22T15:09:00.310 に答える