「C言語/ファイル入出力」の版間の差分
削除された内容 追加された内容
Semi-Brace (トーク | 投稿記録) M added Category:C言語 using HotCat |
s/命令/関数/、SEGVをエラーと表現している部分を修正。 タグ: 2017年版ソースエディター |
||
109 行
::なお、英語で、文字や文章を書くことを write (ライト)という。 wとは、その write の 頭文字w のこと。
::英語で、本や文章を
::英語で、追
なお、一般にファイル操作のプログラミングでは、安全のために、ファイルのオープンに失敗した場合を想定して、そのような処理を書く必要がある。
fclose は、ファイルを閉じる
125 行
ソースファイルのあるフォルダの場所は、Windowsの場合、標準設定では
:\ユーザー名\
の
VisualStudio 2019 をインストールしたとき、既に
139 行
ファイルに何かデータを書き込むには、 <code>fprintf</code> という関数を使う。
:(なお、「fprintf」とはC言語の専門用語であり、日常英語には無い用語である
fprintf の冒頭のfは、ファイル関係であることをあらわしている。最後のfは、もともとC言語には「printf」(プリントエフ)という関数があり、(最後のfは
896 行
Windows(Visual Studio)でもLinux(gcc)でも、
<code>fp1 = fopen("test1.txt", "r");</code> のような
そもそも、
まだファイル"test1.txt"は、まったくオープンされて無い状態です。
1,014 行
ついつい、ファイルを開けなかった場合などには、「この
しかし、上記のように、読み取りに失敗しあたとに、むりやりクローズしようとしても、実行時にエラーになります。
これはどういうことかというと、ファイルのオープンに失敗した場合、そもそも、そのファイルはオープンされてないのでクローズの必要もないです。
==== Linuxの場合 ====
Linuxでも同様です。もしもファイルのオープンに失敗した場合、Linuxでも、そのファイルはオープンされてないのでクローズの必要もないです。
また、もしもオープンに失敗したファイルをクローズしようとした場合、Linux
Linuxの場合、コンパイルできてしまうかもしれ無い場合もありますが、しかしビルドされた実行ファイルの実行時にエラーになり、「コアダンプ」などのメッセージが表示されます。▼
たとえば、次のコードは、読み取り対象のファイル"SettingFile.txt"の無い場合には、実行時にエラーになります
1,066 ⟶ 1,063行目:
いっぽう、次のように改善して、読み込み失敗後のクローズ命令を除去すれば、
(Fedora 31 で確認ずみ)
1,104 ⟶ 1,101行目:
上のコードの
// ここではないfcloseからです。そのような動作は、エラーになり、認められません。
同様に、elseブロック内でクローズした場合でも、さらに「ここではない」の場所でもう一度クローズしてしまうと、これも
1,117 ⟶ 1,113行目:
しかし、読み込みモードでは、対象のファイルが無い場合には、
<!-- 「読み込みモードの対象ファイルが無い場合に、作成したい」と前提が意味不明。また最初の fopenで開いたストリームを始末していない。レースコンディションがある。など問題が多い。
では、どのような場合に、読み込みモードの対象ファイルが無い場合に、作成したいと思うのでしょうか。
1,229 ⟶ 1,226行目:
Aborted (コアダンプ)
</pre>
-->
=== メモのあるファイルの数値の読取 ===
1,340 ⟶ 1,338行目:
== 文字コード ==
{{Main|[[w:Microsoftコードページ932]]}}
Windowsの場合、システム内部の文字コードには原則的にUnicodeを使っているのだが、しかし例外的にコマン
マイクロソフト社は、これをアメリカ標準規格のANSIと呼んでいるが<ref>マイクロソフトは、CP932を「ANSI」とは自称しておらず、[https://docs.microsoft.com/ja-jp/host-integration-server/core/ansi-oem-code-page-support-snanls-1 ANSI/OEM Code Page Support (SNANLS)]の一環として、'''ANSI/OEM - Japanese Shift-JIS'''の名称でサポートしている。この節は、この誤解に基づいて編集されていることに注意する必要がある。</ref>、実は、中身は米国の行政府の定める本物の1バイト文字のANSIでなく、マイクロソフト独自規格の自称「ANSI」である。おそらく、マイクロソフト独自規格の自称「ANSI」は、日本語などの2バイト文字の表示機能を含むので、自称「ANSI」も2バイト以上の文字であろうと考えられている。
1980年代くらいの古い、マイクロソフト日本法人などの開発したShift-JISという比較的に低バイト文字(2バイト以上の文字)の独自規格を、マイクロソフト米国法人の古い低バイト文字(1バイト以上の文字)の文字コードとすりあわせた独自規格のことをマイクロソフト社は「ANSI」と称しているようだ。
いちおう、現在ではShift-JISは日本工業規格になっているが、実際のWindowsでの文字コードの実装では、Windows用に独自にアレンジされたものを使っており、厳密には区別のためCP932という文字コード名で、技術者は呼ぶ。
1,357 ⟶ 1,356行目:
さて、上述のプログラム例で紹介したソースコードのように、特に文字コードの指定をする必要なく、日本語も表示できる。
マイクロソフト社が、そのように、コマン
コマン
もし、単に、あるテキストファイルを読み取ってコマン
読み取り対象のテキストファイルをUnicodeなどに変換すると、コンソール表示の際には、文字化けをしてしまう。
ただし、コマン
1,390 ⟶ 1,389行目:
もっとも、Windowsのコマン
1,449 ⟶ 1,448行目:
</pre>
Fedora28の場合、読み取り対象のテキストファイルの文字コードを何に変えても、コマン
なお、Geditの変換可能な文字コードの一覧に「日本語 (CP932)」 というのがあるが、これがマイクロソフト Shift-JIS のことである(つまり マイクロソフト自称「ANSI」)。もし、マイクロソフト自称ANSIとLINUX用テキストファイルを共通化したい場合、 CP932 を選べばいい。
1,527 ⟶ 1,526行目:
なお、Linuxでよく標準的に付属してくる
また、fopenで読み取るファイルに日本語を使うと、文字化けをしたり、ファイルを開くのに失敗したりする。
|