1. ホーム
  2. c

[解決済み] 関数からchar[]/stringを返す [重複]。

2022-03-13 12:33:53

質問

私はC言語でのコーディングにかなり慣れておらず、現在、C文字列/文字配列を返し、変数に代入する関数を作成しようとしています。

これまでのところ、char * を返すのが最も一般的な解決策であることが確認されています。そこで、私は試してみました。

char* createStr() {
    char char1= 'm';
    char char2= 'y';
    char str[3];
    str[0] = char1;
    str[1] = char2;
    str[2] = '\0';
    char* cp = str;
    return cp;
}

質問は、この返されたものをどう使うかです。 char* で、それが指し示すchar配列をchar[]変数に代入するのですか?

Iveは試してみました(すべてnoob-drowningエラーにつながった)。

  1. char* charP = createStr();
  2. char myStr[3] = &createStr();
  3. char* charP = *createStr();

解決方法は?

変数を動的に割り当てていないことに注意してください。 str この関数の中では、関数が終了するまでに失われます。

あるはずです。

char * createStr() {

    char char1= 'm';
    char char2= 'y';

    char *str = malloc(3);
    str[0] = char1;
    str[1] = char2;
    str[2] = '\0';

    return str;

}

そして、関数を呼び出すときに、データを受け取る変数の型が、関数の戻り値の型と一致する必要があります。だから、こうあるべきなのです。

char *returned_str = createStr();

メモリリークを防ぐため、返された値は必ず解放する必要があることは特筆しておく。

char *returned_str = createStr();

//doSomething
...

free(returned_str);