正斜杠(/)和反斜杠(\)的区别

时间:2021-07-06 04:19:03

正斜杠,符号是"/"; 反斜杠,符号是"\"。

正斜杠/表示除法,分割。

在unix系统中,正斜杠/表示目录。由于web遵循unix命名,所以在网址(URL)中,/表示目录。

在windows系统中,正斜杠/通常用来分割命令行参数,用\表示目录。

windows本地路径用\,如C:\windows\system32。

网络一般用/,如http://www.xxx.com/

 

UNIX操作系统设计了这种路径分割法,它使用斜杠: /。由于网络是首先应用在UNIX计算机之间的,至今为止,一半以上的网络服务器仍是使用UNIX操作系统的,所以网址也沿用了斜杠作路径分隔符。

微软在开发DOS2.0的时候,从UNIX中借鉴了这种目录结构,但由于DOS中,斜杠已经用了作为命令行参数的标志了(UNIX中用的是"-"符),所以只得使用反斜杠:\。

到了windows时代,很多时候已经没有命令行参数的干扰,加上网络使用的扩展,现在斜杠和反斜杠可以互换,没有什么影响。

在DOS中,反斜杠后面是路径,也就是文件名,而斜杠后是加DOS参数,比如

C:\windows\system32  ..反斜杠的后面跟着的是文件名

C:\dir/p                       ..正斜杠后面是命令行参数

 

有时我们会看到这样的路径写法,C:\\windows\\system32 ,也就是用两个反斜杠来来分割路径,这种写法在网络应用或编程中经常遇到,事实上,上面的路径可以用C:/windows/system32 来替代,不会出错。但是如果写成了C:\windows\system32 ,那就可能会出现各种奇怪的错误了。

至于上述问题的出现,要从字符串解析这方面来分析。在C里面,输出字符串时,如果想输出一个换行,就要加上'\n'标志。也就是说,反斜杠\这个符号会把跟在它后面的字符串结合起来转义成其他字符。如果C:\windows\system32 这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠\,甚至紧跟在反斜杠后的字母又被一起转义成了其他字符,再次调用的话会出问题。

字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等,都会遇到对字符串解析的这个问题,由于传统的windows采用的是单个斜杠的路径分割形式,导致在对文件路径解析的时候可能发生不必要的错误,所以就出现了用双反斜杠\\分割路径的形式。不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是反斜杠\,结果也就不会出问题了。

由此也可以看出windows或者说DOS在设计初期考虑不够周全,为了和UNIX一些特征区别开来,将UNIX中的正斜杠/分割符路径方式改成了反斜杠\。这样改变导致的一个问题是在早期DOS命令中,正常的文件是不能包含空格的,如果包含了空格,会导致输入这样的文件名时,命令解析无法将其和参数区分开。例如,想要进入"hutaow yuan"这个目录,直接输入"cd hutaow yuan",命令行将会将其解析为进入"hutaow"目录,而后面的"yuan"做参数,这显然不是所期望的。

而在UNIX中,文件名如果包含空格,可以直接在空格前加反斜杠\进行转义,从而很好的和命令参数区别开(参数之间一般使用空格分隔)。还是上面的例子,在Unix中,只要输入"cd hutaow\ yuan"(在yuan前面的空格前加上"\"),命令行会正确的辨认出"hutaow yuan"并进入这个目录。当然,现在Windows的后续版本已经使用其它方法(比如文件名用双引号括住)解决了空格问题。

 

来源:http://blog.sina.com.cn/s/blog_62dfe3ca0100k1k7.html

      http://www.jb51.net/softjc/21108.html

http://www.cnblogs.com/bingcaihuang/archive/2010/12/22/1913399.html