12,788
回編集
1行目: | 1行目: | ||
== 指定サイズ内で1行を受け取る == | == 指定サイズ内で1行を受け取る == | ||
次のように、文字列の格納領域が256[byte]用意されているとする。<br> | 次のように、文字列の格納領域が256[byte]用意されているとする。<br> | ||
< | <syntaxhighlight lang="c"> | ||
char buffer[256] = {'\0'}; | char buffer[256] = {'\0'}; | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
<code>scanf</code>関数と<code>fgets</code>関数の主な違いを纏めると以下のようになる。<br> | |||
NULL文字\ | NULL文字<code>\0</code>が終端に自動付与されることを考慮すると、ユーザが実質入力できるのは255[byte]までである。<br> | ||
<br> | |||
{| class="wikitable" | <u>※注意</u><br> | ||
<u><code>scanf</code>関数は<code>scanf("%s", buffer);</code>のようにサイズを指定せずに使用できるが、バッファオーバーランの危険性があるので避けること。</u><br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|- | |- | ||
! 説明 ! | ! style="background-color:#66CCFF;" | 説明 | ||
! style="background-color:#66CCFF;" | scanf関数 | |||
! style="background-color:#66CCFF;" | fgets関数 | |||
|- | |- | ||
| 基本的な使用法 || scanf("%255s", buffer) || fgets(buffer, 256, stdin) | | 基本的な使用法 || scanf("%255s", buffer) || fgets(buffer, 256, stdin) | ||
22行目: | 27行目: | ||
| 入力文字の取得 || できる || できない | | 入力文字の取得 || できる || できない | ||
|} | |} | ||
</center> | |||
<br><br> | <br><br> | ||