2016-04-13 5 views
0

cpp checkを実行すると、cpp checkに 'invalid scanf'と表示され、 libcのいくつかのバージョンで膨大な入力データがあります。私のプログラムにクラッシュを与えますか?この問題を取り除くためにどのようにC++ではなくCを書いて、C++標準ライブラリツールではなく、アウトを使用することによりエラーが発生しました "フィールド幅の制限がないscanfは、一部のバージョンのlibcで膨大な入力データでクラッシュする可能性があります"

int a; 
    char str[32]; 
    int part[4]; 
    //after this i am storing some string in 'str'. 
    a=sscanf(str,"%d%d%d%d",&part[0],&part[1],&part[2],&part[3]);//here i am getting that cppcheck portability error. 
この問題を取り除くためにどのように

答えて

1

を手助けしなさい安全ではないc標準ライブラリツールであることが多い。

#include <iostream> 
#include <sstream> 

void test() 
{ 
    std::string str("4 5 6 7"); 
    int part[4]; 

    std::istringstream ss(str); 
    ss >> part[0] 
    >> part[1] 
    >> part[2] 
    >> part[3]; 

} 
0

は何を取得していることは単なる警告です:いくつかのlibcの実装は言う、あなたはあまりにも長い文字列を与え、場合クラッシュする可能性がありますを%sなどCPPCheckは、C++の方法は、あなたの目的を達成するために、他の、タイプセーフを使用することができ推奨しています(ストリームやstd :: to_string()コンバータなど)

関連する問題