[解決済み] C言語で、テキストファイルを読み込んで、すべての文字列を表示するにはどうすればよいですか?
2022-03-04 20:36:52
質問
という名前のテキストファイルがあります。
test.txt
このファイルを読み込んで、内容をコンソールに表示するCプログラムを書きたい(ファイルにはASCIIテキストしか含まれていないものとする)。
文字列変数のサイズを取得する方法がわかりません。こんな感じ。
char str[999];
FILE * file;
file = fopen( "test.txt" , "r");
if (file) {
while (fscanf(file, "%s", str)!=EOF)
printf("%s",str);
fclose(file);
}
サイズ
999
が返す文字列はうまくいきません。
fscanf
はそれよりも大きくなることがあります。 どうすれば解決できますか?
どのように解決するのですか?
一番簡単な方法は、文字を読んで、読んだ直後に印刷する方法です。
int c;
FILE *file;
file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
c
は
int
上記のように
EOF
は負の数であり、プレーンな
char
は、もしかしたら
unsigned
.
ファイルをチャンク単位で読み込むが、動的メモリ割り当てを行わない場合は、以下のようになります。
#define CHUNK 1024 /* read 1024 bytes at a time */
char buf[CHUNK];
FILE *file;
size_t nread;
file = fopen("test.txt", "r");
if (file) {
while ((nread = fread(buf, 1, sizeof buf, file)) > 0)
fwrite(buf, 1, nread, stdout);
if (ferror(file)) {
/* deal with error */
}
fclose(file);
}
上記の2番目の方法は、基本的に動的に割り当てられた配列でファイルを読み込む方法です。
char *buf = malloc(chunk);
if (buf == NULL) {
/* deal with malloc() failure */
}
/* otherwise do this. Note 'chunk' instead of 'sizeof buf' */
while ((nread = fread(buf, 1, chunk, file)) > 0) {
/* as above */
}
のメソッドを使用します。
fscanf()
と
%s
というフォーマットは、ファイルの空白に関する情報を失ってしまうので、正確にはファイルを
stdout
.
関連
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み] テスト
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] なぜテキストファイルは改行で終わらなければならないのですか?
-
[解決済み] Pythonで大きなファイルの行数を安価に取得する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] テスト
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。