generated at
文字列入力
名前(100バイト以内)を入力すると挨拶してくれる
name.c
#include <stdio.h> int main(void) { char name[101]; printf("Your name? "); scanf("%100s", name); printf("Hello, %s!\n", name); return 0; }

単に scanf("%s", name) とすることが多いと思うが,これでは何文字でも入力できてしまい,確保した領域からはみだして,他の領域を壊す可能性がある(セキュリティ上のリスク)。必ず上限を scanf("%100s", name) のように指定する。

入力を保存する場所(上の例では name )は,「文字列終わり」を表す「0」のバイトを含めるため,入力バイト数の上限より一つ長くしておく。

ただし,これでは例えば Haruhiko Okumura と入力したとき Haruhiko までしか入らない。 "%s" は「スペースを含まない文字列」を一つ入力するという意味だからである。改行 \n の直前まで全部入力する(ただし上限100バイト)には scanf("%100[^\n]", name); とする。ここで [...] は文字の集合を表し, [^...] は補集合を表す。したがって [^\n] は改行以外という意味になる。

改行も含めて1行をそのまま入力するには fgets() を使うとよい:
fgets-ex.c
#include <stdio.h> int main(void) { int i; char buf[16]; printf("Input:\n"); fgets(buf, 16, stdin); for (i = 0; i < 16; i++) { printf("%02X [%c]\n", buf[i], buf[i]); } return 0; }

fgets() を使うには,まず入力の仮保管場所(バッファ buffer と呼ばれる)を用意する。 fgets() にはバッファの名前とサイズを指定する。最後の stdin は standard input(標準入力)の意味である。