本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSC]scanf,sscanf,fscanf関数で正規表現[^]がデリミタで機能しない

文書番号: 402069

最終更新日: 2004/04/27


この資料は以下の製品について記述したものです。


概要

この資料は、scanf,sscanf,fscanf 関数で正規表現 [^] がデリミタとして機能しない 現象について説明したものです。

詳細

空白文字で区切られていない文字列を読み込むために、型指定子の変わりに大かっこ ([]) で囲んだ文字列群を指定する事ができますが、この機能により、空白文字以外
の文字をデリミタ (区切り文字) として空白文字を含む文字列を区切ることがで
きます。
このとき、デリミタに正規表現 ([^]) を指定しても正常動作しません。
この現象は、sscanf 関数 fscanf 関数でも、再現します。

再現プログラム

  #include <stdio.h>
  void main (void)
  {
      char string[20];
      sscanf ("Blibbet Fever!", "%9[^]", string);
      printf ("string=%s\n", string);
  }
  //  正しい出力結果
  //  string=Blibbet F

対処方法

カレットの後に、文字列中に含まれない文字コードを与えると正しく機能します。
フォーマット制御文字列を "%9s" にすると、文字列中に空白文字があるとき、空 白文字がデリミタとなるため適当ではありません。"%9[^\n]" も改行コードを含 む読み出しにおいては不適当なため、注意が必要です。
  例: sscanf ("Blibbet Fever!", "%9[^\xff]", string);

詳細

  • QuickC は、米国 Microsoft Corporation の登録商標です。
  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBBUG KB402069
Technology: kbAudDeveloper kbCCompPDS600DOS kbCCompSearch kbQC200 kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8

inserted by FC2 system