Vs-c++ warning[C4129]

一. 问题

使用OpenCV打开图片时报错。

Mat mat=imread("D:\HHH.jpg");

报错为[C4129]

二. 解决

官方文档 [C4129]
“character”:无法识别的字符转义序列
字符 character 或字符串常量中的 () 反序列无法识别为有效的转义序列。 将忽略反杠,不会打印。 将打印反杠后的字符。
若要打印单个反杠,请指定双反 (\) 。

即再转义一下就好了,对了,地址符为\还是/有一定讲究的。

Mat mat=imread("D:\\HHH.jpg");

三. 参考博客

Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符。

Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上的文件浏览器都是用 反斜杠\ 作为路径分隔符。随着发展,DOS系统已经被淘汰了,命令提示符也用的很少,斜杆和反斜杠在大多数情况下可以互换,没有影响。

知道这个背景后,可以总结一下结论:
(1)浏览器地址栏网址使用 斜杆/ ;
(2)windows文件浏览器上使用 反斜杠\ ;
(3)出现在html url() 属性中的路径,指定的路径是网络路径,所以必须用 斜杆/
(4)出现在普通字符串中的路径,如果代表的是windows文件路径,则使用斜杆/和反斜杠\是一样的;如果代表的是网络文件路径,则必须使用 斜杆/ ;
(5)windows系统的地址栏能够识别单反斜杠"“,而不能识别双反斜杠”\",这是系统文件系统自身的约定。所以F:\Office\Trunk__Out\ProDebug\Bin\OfficeInfo.dll这样是不正确的。
(6)而在程序中,字符串中的“\”主要是为了转义,“\”转义后被理解为“\”,“\”才能够被操作系统文件系统所理解,比如用字符串表示上述路径:“F:\Office\Trunk\__Out\Pro Debug\Bin\OfficeIn可以fo.dll”,同理,如果想要表示“\”,可以写作“\\”。
(7) 在不同系统的情况下, windows下是 \ ,linux和unix下是/。但是由于 \ 也是转义字符的起始字符,所以,路径中的 \ 通常需要使用 \ \进行转义 。如C中文件操作,c:\kkk\dd.txt 和 c:/kkk/dd.txt一样。

“./”:代表目前所在的目录
“…/”:代表上一层目录
\ 用于本地
/ 用于网络连接地址

你可能感兴趣的:(#,VS,c++)