質問

cmd.exeでは、コマンド" copy c:\ hello.txt c:\ hello2.txt"を実行できます。そしてそれはうまくいきました。 しかし、私のCプログラムでこのコードを実行すると、次のエラーが発生しました。

#include <iostream>

using namespace std;

int main()
{
    system("copy c:\hello.txt c:\hello2.txt");
    system("pause");

    return 0;
}

出力: システムは指定されたファイルを見つけることができません。

ここで何が起きているのか誰でも知っていますか?

役に立ちましたか?

解決

C文字列(および同じエスケープルールを使用する他の多くの言語)では、エスケープ文字であるため、 \ \\ である必要があります。次のような印刷不可能な文字を通常のテキストで入力できます。

  • タブ文字 \ t
  • 復帰文字 \ r
  • 改行文字 \ n
  • 他の詳細は説明しません。

\ はエスケープ文字として使用されるため、文字列に actual '\' を挿入する方法が必要です。これは、シーケンス \\ で行われます。

したがって、行は次のようになります。

system("copy c:\\hello.txt c:\\hello2.txt");

これにより、次のようなコマンドで不明瞭なエラーが発生する場合があります。

FILE *fh = fopen ("c:\text.dat", "w");

ここで、 \ t は実際には tab 文字であり、開こうとしているファイルは次のとおりです。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c TAB e x t d a t

他のヒント

あるいは、すべてのWindows関数がUnixスタイルのスラッシュをサポートしています

system("copy c:/hello.txt c:/hello2.txt");

奇妙な「\」を見つけやすいため、これを好む人もいます。
ただし、メッセージにこのパスを表示すると、Windowsユーザーを混乱させる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top