system()
コマンドはsnprintf()
代替ではありません。を使用する必要がありsnprintf()
ますsystem()
。
char command[1024];
...
snprintf(command, sizeof(command), "move \"%s%s\" %s", dir, file, dest);
system(command);
または、Windows を使用している場合は、snprintf_s()
代わりにsnprintf()
. ユーザーが値の最後にバックスラッシュを残さない場合dir
、ディレクトリとファイル名の最後のコンポーネントが結合されることにも注意してください。おそらく使用する必要があります:
snprintf(command, sizeof(command), "move \"%s\\%s\" %s", dir, file, dest);
Windows カーネルはパス名にスラッシュを使用することに非常に満足していますが、コマンド プロセッサはそれほど満足していません。オペレーティング システムを直接呼び出すのではなく、コマンド プロセッサを呼び出してプログラムを実行するため、バックスラッシュを使用する必要があると思います。
system()
コンパイラは、正しく呼び出していないことを通知しているはずであることに注意してください。ヘッダーは<stdlib.h>
、関数が引数を 1 つだけ取ることを示しています。
ISO/IEC 9899:2011 §7.22.4.8system
関数
あらすじ
¶1#include <stdlib.h>
int system(const char *string);
説明
¶2 string が null ポインタの場合、system
関数はホスト環境にコマンド プロセッサがあるかどうかを判断します。string が NULL ポインタでない場合、system
関数は が指す文字列string
をそのコマンド プロセッサに渡し、実装で文書化される方法で実行されます。これにより、プログラム呼び出しsystem
が非準拠の方法で動作したり、終了したりする可能性があります。
system()
コンパイラが2 番目の呼び出しで誤用していることを知らせていない場合、またはsystem()
使用前に宣言されていたことに文句を言っていない場合は、コンパイルの警告レベルを上げるか、より優れたコンパイラを入手する必要があります。警告されていた場合は、その内容に注意を払う必要があります。コンパイラは、あなたよりも C についてよく知っていることを忘れないでください。