下面的代码似乎以不同的方式解释传递的文件名中的斜杠,具体取决于它是作为命令行参数传递还是通过文字硬编码。如果图像文件名C:\kimba.jpg
作为命令行参数传入,则可以正常工作:
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage(argv[1]);
//IplImage* img = cvLoadImage("C:\kimba.jpg", 1);
// ...
return 0;
}
另一方面,如果我取消注释第二行并注释第一行,则相同的文件名会在该行中引发异常。我不知道cvLoadImage()
是如何实现的,但似乎(根据调试器)在两种情况下都将相同的内容传递给函数。那么为什么硬编码的文件名导致异常而不是命令行参数呢?
答案 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。所以在第二种情况下找不到文件,你得到一个例外。