文字列入出力


文字列専用の関数を使う

printf()関数やscanf()関数は非常に汎用的な関数です
しかし、scanf()関数で話した様に、文字列の入力や出力に必ずしも向いているとは言えません

C言語の標準関数には、文字列の入出力専用の関数が用意されています
たとえば、文字列を標準出力へ出力する場合は、printf()よりも適任であると言えます
文字列を出力するにはputs()関数を使用します

int puts( const char 文字列へのポインタ );

引数には出力する文字列を指定します
戻り値は正常に終了した場合負でない値を、失敗した場合はEOFを返します

puts()関数は、ヌル文字を改行文字に置き換えて出力します
つまり文字列の終端で、自動的に改行してくれると言うことです
#include <stdio.h>

int main() {
        puts("Kitty on your lap");
        puts("Catd Captor Sakura");
        return 0;
}
文字列の出力にputs()を使うのは、printf()関数よりも関数のサイズが小さく
基本的に実行速度も速いからです

ファイル操作のときに、fputs()という関数を覚えましたね
fputs()は、このputs()のストリーム版です

puts()に対して、標準入力からの文字列の読み出しにはgets()関数があります
この関数は標準入力から1行読み出します
改行文字までの全ての文字を読み出すと、改行コードをヌル文字に置き換えます

char *gets( char *バッファ );

成功すると、引数の値を返します
エラーかファイルの終端を検出するとNULLポインタを返します

バッファには読み出した文字列を格納するポインタを指定します
文字列の読み出しには、scanf()よりも適任です
#include <stdio.h>

int main() {
        char str[128];
        printf("文字列を入力してください>");
        gets(str);
        printf("入力した値 = %s\n" , str);
        return 0;
}
この関数のストリーム版で、やはりfgets()関数というのがありましたね
使い方は、入力先が違うというだけで同じと考えられます

文字列に対して、1文字の入出力をサポートする関数も用意されています
文字を出力するputchar()関数と、文字を入力するgetchar()関数です

int putchar( int c );
int getchar( void );

putchar()には、標準出力へ出力する値をcに指定します
putchar()の戻り値は、エラーが発生するとEOF。それ以外は書き込んだ文字を返します
getchar()は、標準入力から1文字読みとってintにキャストした値を返します
#include <stdio.h>

int main() {
        char ch;
        printf("文字を入力してください>");
        ch = getchar();
        printf("入力された値 = ");
        putchar(ch);
        return 0;
}
これに似た関数でputc()関数とgetc()関数が存在します
これらの関数はfputc()関数とfgetc()関数とまったく同じです

ANSI Cが定められた時、ファイル関数としてfgetc()とfputc()が加わりました
ANSI Cでは、ファイル関数は先頭にfが付くという規則があるためです
しかし、元から存在するgetc()やputc()も伝統的に使われていたために残されています
実装によっては、関数ではなくマクロとして実装している場合もあります

getchar(void)やputchar(int c)は、fgetc(stdin)、fputc( int c , stdout)と機能的に同じです
そして、fgetc()とfputc()はgetc()とputc()に同じです
これらの関係を理解してください


int puts( const char *string );

stdoutに文字列を出力します

ヘッダ - stdio.h
string - 出力する文字列を指定します

戻り値 - 失敗した時にEOF、正常時は負ではない数

int putchar( int c );

stdoutに1文字書き込みます

ヘッダ - stdio.h
c - 書き込む文字を指定します

戻り値 - エラーのときにEOF。正常時は書き込んだ文字

char *gets( char *buffer );

stdinから1列の文字列を読み出します

ヘッダ - stdio.h
buffer - 入力文字を格納する変数のポインタ

戻り値 - 成功すると引数の値、エラー時にはNULL

int getchar( void );

stdinから1文字読み出します

ヘッダ - stdio.h
戻り値 - 読み出した文字。エラー時はEOF



前のページへ戻る次のページへ