に引数を渡すながらcharへの文字列を書く:to.Howeverに従ってszNameでszFmtを組み合わせながら、私はこれを実行すると、私は、szBufでszFmtを結合しようとしている私は次のコードを持っている文字列
char szBuf[256] = "";
std::string szFmt = "You have recieved %s item."
string szName = "Fork";
snprintf(szBuf, sizeof(szBuf), szFmt.c_str(), szName);
をwin10のコード、私はそのような奇妙な出力を得ています:
あなたはLアイテムを受け取りました。
そして、私はOSXエルキャピタンでコードを実行しようとすると、私は次のエラー
が可変引数機能throgh非自明なタイプ「文字列」のオブジェクトを渡すことはできません取得しています。 実行時に呼び出されます
だから何が問題なのですか?これをどのように解決できますか?
注:私はthisの質問をチェックしましたが、答えでは、彼らは直接 "フォーク"を渡しています。しかし、szNameとして渡すとうまくいきません。
[ 'snprintf'の二番目の引数を使用すると、
str
機能を使用し、文字列にアクセスするには](http://en.cppreference.com/w/c/io/fprintf)は、*宛先バッファ*のサイズである必要があります。あなたの場合は 'sizeof szBuf'でなければなりません。'std :: string'オブジェクトのサイズを取得すると、' std :: string'オブジェクトの実際のサイズを取得します。これには、それに含まれる文字列のサイズ( 'szFmt.length()' )。 –
ここでCとC++のイディオムを混在させているので、問題が発生しています。 'sizeof(szFmt)'は文字列の長さを決して与えません。 'szFmt.length()'になります。しかし、実際には、単にsnprintfを削除してストリームを使用してください。 –
@Someprogrammerdude指摘してくれてありがとう、私はそれを修正しましたが、あなたが推測するように、問題は残っています。 – onurcanbektas