[解決済み] ポインタからキャストをせずに整数を返す(単純な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 大きな力には大きな責任が伴います。
関連
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】ローカル変数のメモリはスコープ外からアクセスできる?