1

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;
}

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

ここで何が起こっているか知っている人はいますか?

4

2 に答える 2

17

C文字列(および同じエスケープ規則を使用する他のかなりの数の言語)の内部\\\、エスケープ文字であるためです。通常のテキストで、次のような印刷できない文字を入力できます。

  • タブ文字\t
  • キャリッジリターン文字\r
  • 改行文字\n
  • 私が詳細にカバーしない他のもの。

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

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

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

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

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

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

            c:TABext.datです。

于 2008-10-26T07:56:58.617 に答える
4

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

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

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

于 2009-11-27T14:22:19.790 に答える