3

非同期時間でデータベース サーバーに送信される何千行もの (MySQL) SQL 命令を出力するプログラムを作成しています。SQL 命令の各セットは、*nix パイプ リダイレクトを介してファイルに保存されます。

私が直面している問題は、フィールドNULLの値に関するものです。char *ある場合

printf ( "\"%s\" ", foo_field);

および foo_field は である場合とそうでない場合がありますNULL

NULLMySQL はではなくプレーンな を受け取る必要がある"NULL"ため、値がある場合は二重引用符を削除する必要がありNULLます。値が でない場合はNULL、二重引用符で囲む必要があります。

私が示したケースではif then、パラメーターが%sifNULLまたは\"%s\"if notになるように を配置できますNULL

しかし、20 個のフィールドを持つ SQL 行を考えると、このようにするのはあまり良いことではありません。どうすればこれを達成できますか?

4

3 に答える 3

1

へん。...

printf( "%s" )NULL ポインタに対する の動作は未定義であることに注意してください。

NULLまたはnullまたは空の文字列を引用符で囲むかどうかという意味ではなくnil、アプリケーションが単にクラッシュする可能性があるという意味で。

そのため、C/C++ の信条は、標準関数にセーフティ ネットを追加しないことです。ifライブラリがポインタに対して-を実行するだけでなくelse、クラッシュを回避できます。いいえ、安全にプレイしたい場合は、実装に依存しないように、別のもの追加する必要があります... ifelse

于 2013-04-15T12:57:00.307 に答える