10
void displayinfo(string &filename)
{
printf("%s% 38s\n", "Filename:", filename);
...

警告: タイプ "std::string " の非 POD オブジェクトが変数引数として関数 "std::printf(const char*, ...)" に渡されました。

その警告の意味をオンラインで説明するものは何もありません。

これをprintfに書き込むにはどうすればよいですか(ファイル名= test.txtと仮定):

ファイル名: (ファイル名を右揃え) test.txt

前もって感謝します。

4

3 に答える 3

18

The explanation is quite simple: only PODs (Plain Old Data structures) can be passed as an argument to a variadic function (not a variadic function template though, just a simple variadic function using the ellipses).

std::string is not a POD, but you can do:

printf("%s% 38s\n", "Filename:", filename.c_str());
//                                       ^^^^^^^^

The c_str() member function returns a const char* to the encapsulated C string.

于 2013-06-09T11:51:51.747 に答える
0

私は、ネットが沈黙することを真剣に疑っています。間違った場所を見たり、nad keyworr を使用したりした可能性があります。

基本的なルールは単純で、非 POD を ... 引数として渡すことは未定義の動作です。実装で何らかの動作が定義されていて、それがタスクに一致しない限り、これを行わないでください。

特にprintfファミリーの場合、フォーマット文字列には特定のタイプを渡す必要があり、PODを渡すことが機能したとしてもそれを破りました。

于 2013-06-09T12:00:14.107 に答える