web-dev-qa-db-ja.com

C:値はローカルスコープをエスケープしますか?

したがって、次のtoString関数があります。

/*
 * Function: toString
 * Description: traduces transaction to a readable format
 * Returns: string representing transaction
 */

 char* toString(Transaction* transaction){
    char transactStr[70];

    char id[10];
    itoa(transaction -> idTransaction,id, 10);
    strcat(transactStr, id);

    strcat(transactStr, "\t");

    char date[15];
    strftime(date,14,"%d/%m/%Y %H:%M:%S",transaction -> date);
    strcat(transactStr, date);

    strcat(transactStr, "\t");

    char amount[10];
    sprintf(amount,"%g",transaction -> amount);
    strcat(transactStr,"$ ");
    strcat(transactStr, amount);

    return transactStr;
}

CLionは警告でリターンラインを強調表示します:値はローカルスコープをエスケープします(transactStrを参照)

なぜこれが起こっているのかを知る必要があります(私はCに不慣れです、ところで)

9

その関数内にローカル変数ポインター(感謝の編集)を定義し、それを返そうとしています。

変数の存続期間は、それを囲むスコープの存続期間のみであるため、これはノーノーです。ここでは、関数呼び出しです。運が良ければ、戻り値を参照しようとすると、未定義の動作がトリガーされ、通常はクラッシュします。

配列を返したい場合は、引数として渡す必要があります。

18
Ron Thompson