2

構成ファイルとキーファイルを持つプログラムを作成しようとしています。構成ファイルは、キー ファイルに入力されたものを読み取り、必要に応じてキー値を解析して実行します。

エラーが表示されます: 警告: 非 POD タイプ 'struct std::string' のオブジェクトを '...' に渡すことはできません。呼び出しは実行時に中止されます。

次の行にエラーが表示されます。

snprintf(command, 256, "tar -xvzf %s %s", destination, source);
system(command);

試して説明するコードの詳細:

std::string source = cfg.getValueOfKey<std::string>("source");
std::string destination = cfg.getValueOfKey<std::string>("destination");
int duration = cfg.getValueOfKey<int>("duration");
int count, placeHolder, placeHolderAdvanced;
count = 1;
char command[256];

snprintf(command, 256, "tar -xvzf %s %s", destination, source);
system(command);

//Creates folder 1.
snprintf(command, 256, "mkdir %i", count);
system(command);

//Removes the last folder in the group.
snprintf(command, 256, "rm -rf %i", duration);
system(command);

私が間違っていること、またはどこを見ればよいかについての提案はありますか?

ありがとうございました!

4

3 に答える 3

11

snprintfについて何も知らないstd::string。この場合、NULL で終わる C 文字列、つまりchar、NULL 文字で終わる一連の文字の先頭を指すポインターが必要です。メソッドstd::stringを介して、オブジェクトが保持する基になる null で終了する文字列を取得できます。c_str()

snprintf(command, 256, "tar -xvzf %s %s", destination.c_str(), source.c_str());
于 2013-08-19T17:29:36.450 に答える
5

c_str()メンバー関数を使用します。

snprintf(command, 256, "tar -xvzf %s %s", destination.c_str(), source.c_str());

これは、文字列オブジェクトの現在の値を表す C 文字列を含む配列へのポインターを返します。

于 2013-08-19T17:29:40.573 に答える
1

来て !私たちは 21 世紀にいます。波の頂点に戻りましょう。

#include <sstream>
...
stringstream command;
command << "tar -xvzf " << destination << " " << source;
于 2015-04-28T16:55:51.767 に答える