文字列操作関数
ファイル入出力
C言語には、文字列操作関数と呼ばれる文字列を取り扱う関数が用意されている。これらの文字列操作関数を使用する場合はstring.hをインクルードする必要がある。
#include <string.h> |
strcpy関数は文字列をchar型の配列にコピーする。関数の形式は以下の通りである。
strcpy(アドレス1, アドレス2) |
アドレス1はコピー先(コピーされる)の文字列の先頭アドレス、アドレス2にはコピー元(コピーする)の文字列の先頭アドレスを指定する。
#include<stdio.h> main() { |
strcat関数は2つの文字列を連結して、1つの文字列を作り出す。strcat関数の形式は次の通りである。
strcat(アドレス1, アドレス2) |
アドレス1は連結先(連結される)の文字列の先頭アドレス、アドレス2には連結元(連結する)の文字列の先頭アドレスを指定する。連結先の文字列1の終端に連結元の文字列が連結される。
#include<stdio.h> main() { |
strlen関数は文字列長さを求める。関数の形式は以下の通りである。
strlen(アドレス1) |
strlen関数のデータ型はint型である。アドレスには文字列の先頭アドレスを指定する。関数の戻り値が文字列の長さとなる。
#include<stdio.h> main() { |
strcmp関数は2つの文字列を辞書的は並びの順番で大小比較をする。辞書的な並びとは、"abcd"と"abfg"という2つの文字列を比較する場合、左端から2文字目まで同じであるので、3文字目の'c'と'f'を比較する。'c'の文字コードは'f'よりも小さいので、"abfg"は"abcd"よりも辞書的な並びの順番が大きいと判断される。
strcmp(アドレス1, アドレス2) |
関数のデータ型はint型である。アドレス1、アドレス2には比較する文字列の先頭アドレスを指定する。結果は関数の戻り値として返される。比較は次のように行われる。
文字列1 > 文字列2 |
正 |
文字列1 = 文字列2 |
0 |
文字列1 < 文字列2 |
負 |
strcmp関数は文字列が等しいかそうでないかの判定にも用いることができる。
#include<stdio.h> main() { |
今まで扱ってきた標準入出力は主にキーボードからの入力や画面への出力を扱うものであった。C言語では同様の操作でファイルの中身を読み書きすることができる。すなわち、キーボードから入力する変わりにファイルから入力する、もしくは画面に出力する変わりにファイルに出力するといったことが可能である。
ファイルにはテキストファイルとバイナリファイルがあるが、ここではテキストファイルを用いる。また、どちらの形式のファイルにもファイルの終端にEOF(End Of File)が書き込まれている。
ファイルの操作を行う場合、ファイルを開く、ファイルを読み書きする、ファイルを閉じるという一連の動作が必要である。
これらのファイルの情報はFILE型のデータとして取り扱われる。
FILE *fp; |
FILE型変数の中にはファイルを取り扱うための各種情報が格納されるが、通常、FILE型の変数の中身をユーザーが操作することはない。
次に、ファイルを開くためにはfopen関数を用いる。fopen関数は開きたいファイルのファイル名とファイルを開くモードを指定する。
fopen("filename", "ファイルを開くモード") |
fopen関数は開いたファイルの情報を示すファイル・ポインタを返す。以降、ファイルが閉じられるまで、この得られたファイル・ポインタを用いてファイルの操作を行う。ファイルが開けなかった場合はNULLポインタを返す。
ファイルを開くモードは、ファイルを読み込むために開くのか、書き込むために開くのかを指定する。書き込むためには"r"を、読み込むためには"w"を指定する。
これらのファイルを開くまでの一連の処理は以下の通りである。
#include <stdio.h> |
このサンプル中のexit(0)はプログラムの強制終了を行う命令である。stdlib.hをインクルードしているのはexit関数を使用できるようにするためである。
ファイルを閉じるためにはfclose関数を用いる。fclose関数はファイル・ポインタで指定されたファイルを閉じる。
fclose(ファイル・ポインタ) |
ファイルを開き閉じるまでの一連の処理は以下の通りである。
#include <stdio.h> |
ファイルにデータを書き込んだり、読み込んだりするにはfprintf関数やfscanf関数を用いる。fprintf関数とfscanf関数の使用方法は以下の通りである。
fprintf(ファイルポインタ, 書式指定子, 式1, 式2, …, 式n) fscanf(ファイルポインタ, 書式指定子, &変数1, &変数2, …, &変数n) |
fprintf関数もfscanf関数もファイル・ポインタを指定する以外、printf関数やscanf関数と使用方法は同じである。
fscanf関数の場合、scanfでリターンキーを打つ代わりに、テキストファイルの改行が同じ働きをする。また、fscanfは戻り値としてint型を返し、ファイルから読み込むものが無い場合EOFを返す。
以下のプログラムはファイル名sample.txtのテキストファイルに書き込まれているすべてのint型のデータを読み込み合計するプログラムである。
#include <stdio.h> |