2011-11-14 6 views
0

printf形式の文字列を関数に渡し、sscanf()を使用してその文字列の内容を区切ります。しかし、この関数の使用に伴う問題は次のとおりです。 私はfollwsとしての機能を求めている次のように文字列の合計コンテンツを取得するには?

int var = -1; 
ostringstream ossi; 
ossi << "myContent"; 
std::string detailString = "my first line \n 
          the secon dline content is alos present \n 
          also we are also get s sdjhf sf" 
myFunction("What value: %d \n My content: %s \n Detail Content: %s", var, ossi.str().c_str(), detailString.c_str()); 

実装は次のとおりです。

void myFunction(const char * format, ...) 
{ 

    int var; 
    char myContent[10000]; 
    char detailContent[50000]; 
    if (sscanf(myString, "What value: %d \n My content: %s \n Detail Content: %s", &var, cmyContent, detailContent) == 3) 
    { 
     std::cout<<" #### "<<std::endl; 
     std::cout<<"var value is :"<<var<<std::endl; 
     std::cout<<"My content is :"<<myContent<<std::endl; 
     std::cout<<"detailContent is :"<<detailContent<<std::endl; 
     std::cout<<" #### "<<std::endl; 
    } 
} 

上記の機能イムは、次のように置いてきて:

var value is : -1 
My content is : myContent 
detailContent is : my first line 

代わりに総取得します第3引数(すなわち、detailContent)の内容は最初の行だけになります。 文字列の完全な内容を取得するための提案。 Thanskは事前に です。

+3

コードはコンパイルされません。他の人があなたを助けるために修正してください。 – Andre

答えて

1

CおよびC++の可変引数は、それが動作すると思われるように動作しません。可変引数を使用する方法のチュートリアルについては、this linkを参照してください。

stdargのマニュアルページをご覧ください。

0

私が何をやろうとしていることであることを推測:

char buf[1024] = {}; 
sprintf(buf, "What value: %d \n My content: %s \n Detail Content: %s", var, ossi.str().c_str(), detailString.c_str()); 
myFunction(buf); // not using variable arguments at all 

その後も機能はおそらく、あなたがやりたいことはありません。より良い回答を得るには、達成しようとしていることを書き留めてください。

:C++でのsprintfおよびsscanfの使用は、安全ではないため、お勧めしません。

関連する問題