[解決済み] fprintfのセグメンテーションフォールト - 私が5歳のときのように説明してください。
2022-03-03 21:24:09
質問
ある文字列をファイルに書き込もうとしています。警告もなくコンパイルされましたが、a.outを実行するとセグメンテーション違反になります。しかし、ターゲットファイルは作成されます。私はC言語の初心者なので、書式やその他の欠点があることをお詫びします。以下は私のコードです。
#include<stdio.h>
int main (void)
{
FILE *fp_out;
char str1[]="four score and seven years ago our";
char str2[]="fathers broughy forth on this continent,";
char str3[]="a new nation, concieved in Liberty and dedicated";
char str4[]="to the proposition that all men are created equal.";
fp_out=fopen("my_file", "w");
if(fp_out!=NULL)
{
fprintf(fp_out,"%s\n", str1[100]);
fprintf(fp_out,"%s\n", str2[100]);
fprintf(fp_out,"%s\n", str3[100]);
fprintf(fp_out,"%s\n", str4[100]);
fclose(fp_out);
}
else
printf("The file \"my_file\" couldn't be opened\n");
return 0;
}
解決方法は?
のマニュアルを読む必要があります。
fprintf()
.
int fprintf(FILE *stream, const char *format, ...);
フォーマット文字列の中で
%s
を渡すということです。
fprintf()
という文字列を指定します。
これは文字列です。
char str1[]="four score and seven years ago our";
このように、文字列を印刷するのです。
fprintf(fp_out,"%s\n", str1);
ここでやろうとしていること
fprintf(fp_out,"%s\n", str1[100]);
は101を表示します。
st
の文字
str1
ということは、配列の長さをはるかに超えるメモリにアクセスしようとしていることになります。
関連
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] セグメンテーションフォールトとは何ですか?
-
[解決済み】文字列リテラルで初期化された "char *s "に書き込むと、"char s[]"ではなく、セグメンテーションフォールトが発生するのはなぜですか?]
-
[解決済み】バスエラーとは何ですか?セグメンテーションフォールトとは違うのですか?
-
[解決済み】fprintf、printf、sprintfの違い?
-
[解決済み] セグメンテーションフォールトが発生するコード行を決定しますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない