在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: 01-sourceckme",通过网络传输给了一个linux系统,linux系统怎么知道这里的 是转义还是目录分隔符呢,请允许我蒙逼一会。
因此,请明确,请在window下先做一件事情,如果是分隔符,请写成这样再传输"E:\001-source\bck\me",下面的问题就又来了,怎么将原字符串中的 换成\ 呢?
在VC里,我们可以直接调用CString的成员函数,比如:
CString str_path = "E: 01-sourceckme";
str_path.Replace("\","\\");
那么,作为pure C 主义者,我们能实现一个这样的Replace么?
后续再添加