1. ホーム
  2. c

[解決済み] ポインタからキャストをせずに整数を返す(単純なforループ) [重複]。

2022-02-05 06:27:36

質問

このC言語コードは、なぜタイトルにあるような警告を返すのでしょうか?

char n_zeroes(int n) {
  char str[n];

  int i;
  for (i = 0; i < n; i++) {
    str[i] = '0';
  }

  return str;
}

解決方法は?

この関数は char の配列を返しています。 char . しかし、戻り値が char * なぜなら、ローカル変数を返すのではなく、このように関数の引数として配列を渡さなければならないからです。

void
n_zeroes(int n, char *str)
{
    for (int i = 0 ; i < n ; ++i)
        str[i] = '0';
}

と同じですが、これは本質的に

memset(str, '0', n);

また、0だけで埋め尽くされたこの配列は、文字列を表さないことに注意してください。 str * 関数に渡すか printf() という関数で "%s" 指定子を使用する場合は、最後にもうひとつ '\0' または 0 .

このエラーからわかるように、あなたのコードは明示的なキャストをせずに整数からポインタを作っています。これは、整数をポインタにキャストすることが許されているからです。それが正しいかどうかは全く別の話ですが、標準規格では誤用される可能性のあることもたくさん許されています。それが c 大きな力には大きな責任が伴います。