[解決済み] プロセスが戻り値3221225477で終了した
2022-01-30 17:35:40
質問
私はこのコードを書いています。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int i;
fp = fopen("keimeno.txt","r");
fscanf(fp,"%d",i);
printf("%d\n",i);
fclose(fp);
return 0;
}
を含み、そのファイルには
2
Yiannis Ioannou 356
3
Today
10347
If
345
And then none
1542
John Smith 743
2
My story
3940
Feedback
682
END
実行しようとすると、valueが終了してしまいます。
3221225477
という数字が表示されるのではなく、2...
なぜなのか、どなたか説明してください。
解決方法は?
数値をスキャンする場合、結果を格納する変数のアドレスを渡す必要があります。
fscanf(fp,"%d",&i);
があるところ。
fscanf(fp,"%d",i);
^ missing the & sign!
コンパイラは警告を出すべきでしたね - コンパイル時に警告を有効にしていますか?
ここで起きているのは
fscanf
関数は指定された場所に書き込みます (あなたの場合、この関数は
を指します。
によって
値
の
i
に書き込むのではなく
の場所
i
) . その結果、あなたの場合、プログラムがクラッシュするまでの相当な時間、"running"することになるのです。
Brandinが指摘したように、あなたのコードにはさらなる問題があります(問題の原因である可能性は低いのですが)。ファイルを開こうとするときは、必ず成功したかどうかをチェックする必要があります。 これは、次のような方法で行います。
#include <assert.h>
// at the top of the program
// attempt to open the file:
fp = fopen("keimeno.txt","r");
// and check whether you succeeded:
assert(fp != NULL); // this says "check fp is not NULL. Otherwise, quit."
あるいは、次のようにして、もう少しきれいにすることもできます。
const char *fileName = "keimeno.txt";
const char *mode = "r";
if((fp=fopen(fileName, mode))==NULL) {
printf("cannot open file %s\n", fileName);
return -1;
}
関数呼び出しの中に埋め込むのではなく、プログラムの先頭付近に "ハードワイヤード値" を置くのが、ほとんどの場合良いアイデアです。
関連
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] テスト
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] CとC++でmain()は何を返すべきですか?
最新
-
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コンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】strcmpが機能しない
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】malloc():メモリ破壊
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】makefile:4。*** missing separator. 停止する