C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <stdio.h>

int sscanf( const char *str , const char *format , ... );

■戻り値:
文字列strに対してformat文字列に従った変換を行い、format文字列より後ろに指定された引数に代入して、その代入した個数を返す。
変換に失敗した場合はエラーとしてEOFを返す。
format文字列とは%sや%dを指す。

説明

文字列strから読み出した値を別のプログラム変数に取り込み、その取り込んだ個数を返す。取り込む先の変数の指定は、上記の書式で指定された第3引数以降「...」部分に任意の個数を指定することができる。

但し、「...」指定時にはアドレス指定でなくてはならない。取り込む変数型はformat文字列にformat指定子として指定するが、取り込む変数の型と順序及び個数を一致させなくてはならない。(一致させた方が無用なトラブルを避けられる)

文字列strとして変換対象データを複数個指定するには、半角空白またはタブ(\t)、改行(\n)で区切って文字列とすれば良い。
尚、取り込んだ変数の末尾にNULL(\0)を補完するのはformat指定子が%sの場合である。

本関数sscanfはfscanfファイルポインタを指定する代わりに文字列を指定したものであり、ファイルEOFの代わりに(文字列なので)NULL(\0)を認識する。

サンプル

#include <stdio.h>

main() {
  int ret;
  char instr[] = "abc 123\t456\n789";
  char cout[4];
  int iout1;
  int iout2;
  int iout3;

  /* 文字列instrから各変数に変換して代入 */
  ret = sscanf( instr , "%3s%d%d%d" , cout
                           , &iout1 , &iout2 , &iout3 );
  if( ret == EOF ) {
    printf( "sscanfでエラー\n" );
    return -1;
  }

  /* 変換して代入された変数を表示 */
  printf( "cout=%s\n" , cout );/* abc */
  printf( "iout1=%d\n" , iout1 );/* 123 */
  printf( "iout2=%d\n" , iout2 );/* 456 */
  printf( "iout3=%d\n" , iout3 );/* 789 */
  printf( "ret=%d\n" , ret );/* 4(取り込んだ件数) */

  return 0;
}

実行結果

cout=abc
iout1=123
iout2=456
iout3=789
ret=4


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.