通过命令行参数传递文件名与使用字符串文字in-code

时间:2011-02-28 22:07:36

标签: c++ string command-line

下面的代码似乎以不同的方式解释传递的文件名中的斜杠,具体取决于它是作为命令行参数传递还是通过文字硬编码。如果图像文件名C:\kimba.jpg作为命令行参数传入,则可以正常工作:

int main( int argc, char** argv ) 
{
    IplImage* img = cvLoadImage(argv[1]);
    //IplImage* img = cvLoadImage("C:\kimba.jpg", 1);

    // ...

    return 0;
}

另一方面,如果我取消注释第二行并注释第一行,则相同的文件名会在该行中引发异常。我不知道cvLoadImage()是如何实现的,但似乎(根据调试器)在两种情况下都将相同的内容传递给函数。那么为什么硬编码的文件名导致异常而不是命令行参数呢?

4 个答案:

答案 0 :(得分:6)

你需要用反斜杠转义反斜杠:

IplImage* img = cvLoadImage("C:\\kimba.jpg", 1);

答案 1 :(得分:3)

' \' character是C ++中的转义字符。得到一个' \'字符文字,你需要逃避它(注意双' \'):

IplImage* img = cvLoadImage("C:\\kimba.jpg", 1);

HTH。

答案 2 :(得分:1)

使用"C:\\kimba.jpg" - \用于转义特殊字符,例如\n

答案 3 :(得分:1)

字符串文字中的反斜杠是转义字符,而在命令行参数中,它被解释为-is。所以在第二种情况下找不到文件,你得到一个例外。