system()复制失败,而cmd复制工作

时间:2008-10-26 07:51:32

标签: c copy system command escaping

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

输出: 系统找不到指定的文件。

有人知道这里发生了什么吗?

2 个答案:

答案 0 :(得分:17)

在C字符串内部(以及其他一些使用相同转义规则的语言),\应为\\,因为它是转义字符。它允许您以普通文本输入不可打印的字符,例如:

  • 标签字符\t
  • 回车符\r
  • 换行符\n
  • 其他我不会详细介绍。

由于\用作转义字符,我们需要一种方法将实际 '\'放入字符串中。这是通过序列\\完成的。

因此,您的行应该是:

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

这有时会导致使用以下命令产生模糊错误:

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

其中\t实际上是tab字符,而您尝试打开的文件是:

C TAB 电子 X d

答案 1 :(得分:4)

或者,所有Windows函数都支持Unix样式斜杠

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

有些人更喜欢这个,因为更容易发现奇怪的'\' 但如果您在邮件中显示此路径,则可能会混淆Windows用户。