今天拷贝了一段代码
struct Test { Test( int ) {} Test() {} void fun() {} }; void main( void ) { Test a(1); a.fun(); Test b(); b.fun(); }
编译的时候报错
01.cpp:16:1: error: stray ‘240’ in program 01.cpp:16:1: error: stray ‘302’ in program 01.cpp:16:1: error: stray ‘240’ in program 01.cpp:16:1: error: stray ‘302’ in program 01.cpp:16:1: error: stray ‘240’ in program 01.cpp: In function ‘int main()’: 01.cpp:14:4: error: request for member ‘fun’ in ‘b’, which is of non-class type ‘Test()’ b.fun();
显然是字符的问题,
[root@ba face]# cat -v 01.cpp #include <stdio.h> struct TestM-BM- M-BM- M-BM- {M-BM- M-BM- M-BM- Test(int){}M-BM- M-BM- M-BM- Test(){}M-BM- M-BM- M-BM- void fun(){}M-BM- M-BM- M-BM- };M-BM- M-BM- M-BM- intM-BM- main(void)M-BM- M-BM- M-BM- {M-BM- M-BM- M-BM- TestM-BM- a(1);M-BM- M-BM- M-BM- a.fun();M-BM- M-BM- M-BM- TestM-BM- b();M-BM- M-BM- M-BM- b.fun();M-BM- M-BM- M-BM- return 0; }M-BM- M-BM- M-BM-
猜想M-BM-是Linux下的一个特殊字符,要怎么替换呢,想到用十六进制方式替换,那么首先查看这个特殊字符的十六进制表示,用od命令
[root@ba face]# od -tcx1 01.cpp 000000 # i n c l u d e < s t d i o . 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 000010 h > s t r u c t T e s t 302 68 3e 0a 0a 73 74 72 75 63 74 20 54 65 73 74 c2 000020 240 302 240 302 240 { 302 240 302 240 302 240 T e a0 c2 a0 c2 a0 0a 7b c2 a0 c2 a0 c2 a0 0a 54 65 000030 s t ( i n t ) { } 302 240 302 240 302 240 73 74 28 69 6e 74 29 7b 7d c2 a0 c2 a0 c2 a0 0a 000040 T e s t ( ) { } 302 240 302 240 302 240 v 54 65 73 74 28 29 7b 7d c2 a0 c2 a0 c2 a0 0a 76 000050 o i d 302 240 f u n ( ) { } 302 240 302 240 6f 69 64 c2 a0 66 75 6e 28 29 7b 7d c2 a0 c2 a0 000060 302 240 } ; 302 240 302 240 302 240 v o i d c2 a0 0a 7d 3b c2 a0 c2 a0 c2 a0 0a 76 6f 69 64 000070 302 240 m a i n ( v o i d ) 302 240 302 240 c2 a0 6d 61 69 6e 28 76 6f 69 64 29 c2 a0 c2 a0 000080 302 240 { 302 240 302 240 302 240 T e s t 302 c2 a0 0a 7b c2 a0 c2 a0 c2 a0 0a 54 65 73 74 c2 000090 240 a ( 1 ) ; 302 240 302 240 302 240 a . f a0 61 28 31 29 3b c2 a0 c2 a0 c2 a0 0a 61 2e 66 0000a0 u n ( ) ; 302 240 302 240 302 240 T e s t 75 6e 28 29 3b c2 a0 c2 a0 c2 a0 0a 54 65 73 74 0000b0 302 240 b ( ) ; 302 240 302 240 302 240 b . f c2 a0 62 28 29 3b c2 a0 c2 a0 c2 a0 0a 62 2e 66 0000c0 u n ( ) ; 302 240 302 240 302 240 } 302 240 75 6e 28 29 3b c2 a0 c2 a0 c2 a0 0a 7d c2 a0 0a 0000d0
可以看到这个特殊字符的十六进制表示是c2 a0,,用如下命令替换即可
[root@ba face]# sed -i 's/xc2xa0//g' 01.cpp [root@ba face]# cat -v 01.cpp #include <stdio.h> struct Test { Test(int){} Test(){} void fun(){} }; int main(void) { Test a(1); a.fun(); Test b(); b.fun(); return 0; } [root@ba face]# g++ 01.cpp 01.cpp: In function ‘int main()’: 01.cpp:14:4: error: request for member ‘fun’ in ‘b’, which is of non-class type ‘Test()’ b.fun();