3

重複の可能性:
リテラル (または定数) 文字配列 (文字列) へのポインターを返しますか?

以下のコードは正しいですか?

const char* state2Str(enum State state)
{
   switch (state)
   {
      case stateStopped: return "START";
      case stateRunning: return "RUNNING";
      default: return "UNKNOWN";
   }
}

printf("State is: %s\n", state2Str(stateRunning));

私が心配しているのは、関数が一時オブジェクトへのポインターを返すことです。そのような戻り値の寿命は何ですか? 言語は C89 です。

4

2 に答える 2

6

コードは問題ありません。プログラムの期間中有効な文字列リテラルへのポインターを返しています。

C89 標準から:

3.1.4 文字列リテラル

文字列リテラルは、静的な保存期間と型「char の配列」を持ち、指定された文字で初期化されます。

于 2013-01-29T11:01:37.457 に答える
5

あなたの質問のコードの場合、あなたは一時的なものへのポインタを返していません。コード間またはグローバルデータ間で格納されている文字列リテラルへのポインタを返します。すべての文字列リテラルの期間は、プログラムの存続期間です。

于 2013-01-29T11:02:52.843 に答える