1

重複の可能性:
ローカル変数へのポインター

#include <iostream>
using namespace std;

char* func();

int main() {
    char* str;
    str = func();
    cout<<str;
    return 0;
}

char*  func() {
    char * str;
    char p[] = "priyanka is a good girl";
    str = p;
    cout<<str<<"\n";
    return str;
}

出力を与える、

プリヤンカはいい子です

priy

ここで何が起こったのか、なぜ不完全な配列が出力として与えられたのか理解できませんでした。私はこれに少し慣れていません。助けてください。

4

2 に答える 2

4

関数func()はローカル変数へのポインタを返します。これにより、後でアクセスしようとすると未定義の動作が発生します。

于 2012-11-08T18:58:09.293 に答える
1

Infunc2() char p[]は、スタックで初期化されたローカル変数です。スタック変数へのポインタを返すことは悪い考えであり(そして未定義の動作でもあります)、関数が返されたときに文字列「priyanka isagoodgirl」が上書きされたと思います。

于 2012-11-08T19:05:38.880 に答える