正斜杠 与反斜杠之争

在linux 和windows平台上编程时,我们常常遇到正斜杠 / 和 反斜杠 \ ,这两个很 眨眼的 符号,那么二者有哪些区别呢?本文将重点讲讲二者的差异

正斜杠 / 翻译为 slash ;而反斜杠 \ 为backslash ,有人 用汉字的 来分别区分二者,确实如此,汉语本来就博大精深。

在unix类平台上,我们使用 slash 即正斜杠来分隔一个个的目录名称,比如“usr/lib/”,而使用backslash 即反斜杠来表示转义标识 ,而因为C语言与unix的天然亲密关系,所以在C语言里,如果是给linux编程,我们基本无需操心正反斜杠的问题。

但是,作为世界占有率第一的桌面系统,号称有最好的开发环境之称的windows平台,使用了反斜杠\来分隔目录,别出心载固然值得赞美,但是哗众取宠就是你的不对了。因此,我们在编码时经常看到这样的字符串,“E:\\mydir1\\dir2”,是的,看起来还可以接受,但是如果是这样呢"E:\\pro\ my\\dir2",越发奇怪了,这里要表示的路径是因为有个文件名称为pro my,如果这里的中间没有\ 那么window会认为这里到pro就结束了,这在程序运行时 ,就会出现没有该文件存在的告警了。

为何呢,还是因为 反斜杠的本质工作 其实就是转义标识的,但是window的早期设计者 让它在其平台的 又充当了目录分隔符的责任,责任越大,问题就越多。为了让编译器知道本反斜杠不是作为转义使用的 ,必须在反斜杠前面再加一个反斜杠,所以,在window字符串中\\才是真正意义上的目录分隔符。

无语归无语,但是 作为历史遗留问题,后人在一边骂前window设计者傻逼的同时,我们还是要默默忍受这种折磨。

下面问题来了,如果 一个window下的字符串"E:\001-source\bck\me",通过网络传输给了一个linux系统,linux系统怎么知道这里的\ 是转义还是目录分隔符呢,请允许我蒙逼一会。

因此,请明确,请在window下先做一件事情,如果是分隔符,请写成这样再传输"E:\\001-source\\bck\\me",下面的问题就又来了,怎么将原字符串中的\ 换成\\ 呢?

在VC里,我们可以直接调用CString的成员函数,比如:

CString str_path = "E:\001-source\bck\me";
str_path.Replace("\\","\\\\");

那么,作为pure C 主义者,我们能实现一个这样的Replace么?

后续再添加

posted @ 2017-04-27 09:49  Lckfa  阅读(1183)  评论(0编辑  收藏  举报