- 论坛徽章:
- 0
|
本帖最后由 jc_zhong 于 2010-11-14 15:47 编辑
我们知道,在Unix/Linux里面,换行是只有一个'\n'的。在我作K&R的3-2练习时出现些奇怪的“现象”。
当我试图将一个字符串:aa\tbb\rcc\ndd中的字符\t等转换为'\t'时输出了莫名其妙的结果
cc bb
dd
'aa'不见了,'cc'和'bb'的位置颠倒了,只要试图对\r转换为'\r',就会出问题。
那么回车符在Unix\Linux中有什么用呢?试图转换时发生了什么?
PS:我曾经试过$man grep > grep ,然后用VI打开后发现里面不可见字符都被显示出来,其中就有\r.
这个现象发生在在Fedora中执行上述指令,然后把文件拿到Debian上看时。
望各位不吝指教!多谢!
附上我写的代码:- #include <stdio.h>
- #include <string.h>
- void rescape(char s[],char t[])
- {
- int i,j;
- for(i = j = 0; i <= strlen(t); i ++, j ++)
- {
- if(t[i] == '\\')
- {
- switch(t[++i])
- {
- case 'n':
- {
- s[j] = '\n';
- break;
- }
- case 'r':
- {
- s[j] = '\r';
- break;
- }
- case 't':
- {
- s[j] = '\t';
- break;
- }
- defaule : break;
- }
- }
- else
- {
- s[j] = t[i];
- }
- }
- }
- int main()
- {
- char s[200];
- char t[200];
- scanf("%s",t);
- rescape(s,t);
- printf("%s\n",s);
- return 0;
- }
复制代码 |
|