8

私はこのようなことをしたいと思います:

writeLog(printf("This is the error: %s", error));

だから私はフォーマットされた文字列を返す関数を探しています。

4

2 に答える 2

7

そのような関数が存在しない場合は、少し異なるアプローチを検討してください: writeLogprintf のようにします。つまり、文字列と可変数の引数を取ります。次に、メッセージを内部的にフォーマットします。これにより、メモリ管理の問題が解決され、 の既存の使用法が損なわれることはありませんwriteLog

これが可能であることがわかった場合は、次の行に沿って何かを使用できます。

void writeLog(const char* format, ...)
{
    char       msg[100];
    va_list    args;

    va_start(args, format);
    vsnprintf(msg, sizeof(msg), format, args); // do check return value
    va_end(args);

    // write msg to the log
}
于 2012-06-24T20:29:05.977 に答える
6

標準ライブラリにはそのような関数はなく、標準ライブラリにもそのような関数はありません。

必要な場合は、自分で作成できます。これがあなたが考える必要があることです:

  1. 返された文字列にストレージを割り当てるのは誰ですか?
  2. 返された文字列のストレージを解放するのは誰ですか?
  3. スレッドセーフになるのでしょうか?
  4. 返される文字列の最大長に制限はありますか?
于 2012-06-24T19:54:00.417 に答える