「C言語/ファイル入出力」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎ワイド文字のファイル入出力: キャラクターセットとエンコーディングの混同
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
敬体に統一。
タグ: 2017年版ソースエディター
28 行
FILE *
</syntaxhighlight>
: である
 
=== Visual Cで標準入出力関数などを使用する場合 ===
58 行
</syntaxhighlight>
 
<code>#pragma warning(disable:4996)</code> が、fopenなどの関数の使用を許可するプラグマである。これは、<code>stdafx.h</code> など一連のWindows用ヘッダのインクルードの後に指令する必要がある。
 
{{コラム|Visual Studio で、デバッグ セッションの終了時にコンソールが閉じてしまう場合|
127 行
#include <stdio.h>
</syntaxhighlight>
でインクルードすれば充分である
 
 
164 行
 
 
ファイル書き込むのできる変数の型は、数値型も文字列型でも可能である
 
 
490 行
 
たとえば、
次のようなデータである
 
ファイル名「sample.csv」
567 行
さきほどの章では、説明の都合上、fscanfを使ったが、じつは、fscanfでCSVファイルを作るのは、あまり実用的ではない。
 
なぜなら、まず空白文字(半角スペース)で読み込みを停止してしまうので、半角スペースを含む文字列の読み込みが出来無いからである
 
 
581 行
<code> strtok </code> 関数とは、指定した文字列の直前までを読み込み機能のある関数なので、この関数でカンマ文字まで読み込むことを関数すればいい。<code> strtok </code> では、指定した文字列じたいは読み込まない。
 
なお、 <code> strtok </code> 関数を使うためには <code> #include <string.h> </code> が必要である
 
書式は
806 行
 
== if文との組み合わせ ==
fgets関数やstrtok関数などで読み取った文字列をもとに、if文などの条件分岐関数と組み合わせる際、標準C言語のif文では、文字列にはイコール記号<code>==</code> など算術的な記号での比較ができないですません
 
これはつまり、Linux標準のGCCCでは、文字列の比較にイコール記号が使えないという事です。
 
標準C言語では、文字列どうしの比較をする際、<code> strcmp </code> という関数を使います。
814 行
strcmpについて詳しくは『[[C言語/制御文]]』をお読みください。
 
 
== 文字コード ==
{{Main|[[w:Microsoftコードページ932]]}}
 
== Linux の場合 ==
一例として、Fedora28でファイル入出力を実行する場合のコードと実行結果の例を下記にしめします。
 
テキストファイルの文字コードはUTF-8である。Fedoraの標準の文字コードのままである。テキストエディタにはGedit(ジーエディット)を用いている。GeditはFedora28で標準に付属してくるテキストエディタである
 
<syntaxhighlight lang="C">
833 ⟶ 830行目:
return 1;
}
printf("ファイルをオープンしました。\n");
else {
printf("ファイルをオープンしました。\n");
}
 
 
char str1[150];
844 ⟶ 838行目:
printf("ファイル1行目に書いてある文字列\n");
printf("%s\n", str1);
 
 
fscanf(fp, "%s", str1);
852 ⟶ 845行目:
fclose(fp);
printf("ファイルをクローズしました。\n");
 
return 0;
}
</syntaxhighlight>
 
 
;実行結果
<pre>
921 ⟶ 910行目:
バイナリエディタで読み込み
42 4D 03 04 05
と書き込まれていることが確認できれば成功である