2

gcc4.4 を使用する Ubuntu 10.04 でも同じ問題が発生します。gcc4.1 を使用する RH 5.5 でも同じコードが正常に動作します。

#include <sstream>
#include <iostream>

int main(int argc, char** argv) {

  std::stringstream myStream;
  myStream << "-123";

  unsigned int myUInt;
  myStream >> myUInt;

  if(myStream.fail()) {
    std::cout << "FAILED" << std::endl;
  }
} 

は FAILED を与えません、私はすでにこれを見つけました:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39802

gcc4.1で修正されたと記載されていますが、そのミスの振る舞いが(何かが欠けていない限り)同じ問題に関連しているかどうかはわかりません。

4

1 に答える 1

1

なぜ失敗することを期待しているのかわかりません。sscanf() も失敗しませんが、数値を読み取り、C++ ストリームは scanf 関数のように機能するはずです。

#include <stdio.h>

int main(int argc, char** argv) {
    unsigned int n;
    if ( ! sscanf( "-1", "%ud", & n ) ) {
        printf( "fail\n" );
    }
    else {
        printf( "%ud", n );
    }
} 

4294967295d を出力します。

また、文字列ストリームの符号なし変換が壊れていることも参照してください。.

于 2010-08-04T15:41:22.177 に答える