0
void TATTDataset::AckErrHandler(const NDataString& ErrMsg)
{
    system("echo ErrMsg: %s >> err", (const char *)ErrMsg);
    ...... code .......
}

このエラーメッセージはどういう意味ですか?どうすれば解決できますか?ErrMsg.toCString()も役に立ちません。なにか提案を?

編集:

提案どおりにコードを編集しました-

String s;    
Char *tmpStr = ErrMsg.ToCString();
s.Format("echo ErrMsg: %s >> err",tmpStr);    
system(s);

それでも私は得る:'char*'を'constchar*'で初期化することはできません。Char * tmpStr = ErrMsg.ToCString();

4

4 に答える 4

1

system()呼び出しには、実際には1つの引数しかありません。あなたがやろうとしていることは、のsystem()ように振る舞わせることですprintf()。それは明らかにそれが設計された方法ではありません。

解析を実行したり、一時バッファを作成してsprintf()を使用したりできる文字列クラスを使用することはできません。

于 2009-09-21T09:55:06.447 に答える
1

すでに述べたように、system() は 1 つの引数 (文字列) しか取りません。

ErrMsg.toCString() が MFC CString を返す場合は、これを試すことができます。

void TATTDataset::AckErrHandler(const NDataString& ErrMsg)
{
    CString s;
    s.Format("echo ErrMsg: %s >> err", ErrMsg.toCString());
    system(s);
    ...... code .......
}
于 2009-09-21T09:58:06.663 に答える
0

システム関数には引数が1つしかありませんが、2つ渡されました。

1st argument: "echo ErrMsg: %s >> err"
2nd argument: (const char *)ErrMsg

1つの引数のみを渡すか、system()を再定義して2つの引数を受け入れることにより、これを解決します。

于 2009-09-21T09:54:08.853 に答える
0

あなたは2つの引数をシステムに渡しています。

2つは「echoErrMsg:%s>>err」です。

(const char *)ErrMsg

私はあなたがそういう意味だったと思うので、それらを組み合わせてください例えば、snprintfを使用してください

これが実際のコードである場合でも、システム(fprintfなど)を使用するのではなく、エラーメッセージをファイルに直接出力します。

于 2009-09-21T09:54:41.673 に答える