「C言語の基礎 - 標準入力から安全に文字列を取得する」の版間の差分

ナビゲーションに移動 検索に移動
1行目: 1行目:
== 指定サイズ内で1行を受け取る ==
== 指定サイズ内で1行を受け取る ==
次のように、文字列の格納領域が256[byte]用意されているとする。<br>
次のように、文字列の格納領域が256[byte]用意されているとする。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  char buffer[256] = {'\0'};
  char buffer[256] = {'\0'};
  </source>
  </syntaxhighlight>
<br>
<br>
scanf関数とfgets関数の主な違いを纏めると以下のようになる。<br>
<code>scanf</code>関数と<code>fgets</code>関数の主な違いを纏めると以下のようになる。<br>
NULL文字\0が終端に自動付与されることを考慮すると、ユーザが実質入力できるのは255[byte]までであることに注意する。<br>
NULL文字<code>\0</code>が終端に自動付与されることを考慮すると、ユーザが実質入力できるのは255[byte]までである。<br>
また、scanf関数はscanf("%s", buffer);のようにサイズを指定せずに使用できるが、バッファオーバーランの危険性があるので避けること。<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;"
|-
|-
! 説明 !! scanf関数 !! fgets関数
! 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>


案内メニュー