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

Kri*_*ato 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ins 6

你需要用反斜杠来逃避反斜杠:

IplImage* img = cvLoadImage("C:\\kimba.jpg", 1);
Run Code Online (Sandbox Code Playgroud)

  • 作为命令行参数传递时,单个反斜杠将完全解释为反斜杠.C/C++字符串文字中的反斜杠是一个特殊字符,用于指定某些字符(例如,选项卡的\ t). (3认同)