在写程序时,有时候编译器需要程序必须是英文输入,但大家经常切到中文或者直接复制网络上的源代码,所以就出现了
get_ip.c:28:1: 错误: 程序中有游离的‘\240’
get_ip.c:28:1: 错误: 程序中有游离的‘\302’
get_ip.c:28:1: 错误: 程序中有游离的‘\240’
get_ip.c:32:1: 错误: 程序中有游离的‘\302’
get_ip.c:32:1: 错误: 程序中有游离的‘\240’
get_ip.c:36:1: 错误: 程序中有游离的‘\302’
get_ip.c:36:1: 错误: 程序中有游离的‘\240’
这一般是“”,“”、,、;等符号使用错误,有时甚至是空格。
怎么解决呢?
很简单就是把他们一一改正,但很多不容易找怎么办?
可以使用linux 下的od命令加上重定向,
od详解:
Linux指令:od
示例用法:od -c hello
Linux指令:od
od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。
语法:od [选项] 文件…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。
说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal
Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。
例如:
1.qust@qust-K42JZ:~/test$ gcc get_ip.c -o get_ip
get_ip.c: 在函数‘main’中:
get_ip.c:32:1: 错误: 程序中有游离的‘\302’
get_ip.c:32:1: 错误: 程序中有游离的‘\240’
get_ip.c:36:1: 错误: 程序中有游离的‘\302’
get_ip.c:36:1: 错误: 程序中有游离的‘\240’
2.我们在终端中用 od -c get_ip.c > log.txt 命令将get_ip.c的内容已以 ASCII字符或反斜杠序列 输出到log.txt 中
3.查看log.txt内容
0000000 # i n c l u d e < s t d l i b
0000020 . h > \n # i n c l u d e < s t
0000040 r i n g . h > \n # i n c l u d e
0000060 < s y s / s o c k e t . h > \n
0000100 # i n c l u d e < s y s / i o
0000120 c t l . h > \n # i n c l u d e
0000140 < n e t / i f . h > \n # i n c l
0000160 u d e < s t d i o . h > \n # i
0000200 n c l u d e < n e t i n e t /
0000220 i n . h > \n # i n c l u d e <
0000240 a r p a / i n e t . h > \n \n i n
0000260 t 302 240 m a i n ( ) \n { \n i n t 302
0000300 240 i = 0 ; \n i n t 302 240 s o c k f
0000320 d ; \n s t r u c t 302 240 i f c o n
0000340 f i f c o n f ; \n u n s i g n
0000360 e d 302 240 c h a r 302 240 b u f [ 5 1
0000400 2 ] ; \n s t r u c t 302 240 i f r e
0000420 q * i f r e q ; \n / / 345 210 235 345
0000440 247 213 345 214 226 i f c o n f \n i f c o
0000460 n f . i f c _ l e n = 5 1 2 ;
0000500 \n i f c o n f . i f c _ b u f
0000520 = b u f ; \n i f 302 240 ( ( s o c
0000540 k f d = s o c k e t ( A F _
0000560 I N E T , S O C K _ D G R A M ,
0000600 0 ) ) < 0 ) \n { \n p e r r o r (
0000620 " s o c k e t " ) ; \n e x i t (
0000640 1 ) ; \n } \n i o c t l ( s o c k
0000660 f d , S I O C G I F C O N F , &
0000700 i f c o n f ) ; 302 240 / / 350 216 267 345
0000720 217 226 346 211 200 346 234 211 346 216 245 345 217 243 344 277
0000740 241 346 201 257 \n / / 346 216 245 344 270 213 346 235 245
0000760 344 270 200 344 270 252 344 270 200 344 270 252 347 232 204 350
0001000 216 267 345 217 226 I P 345 234 260 345 235 200 \n i f
0001020 r e q = ( s t r u c t 302 240 i f r
0001040 e q * ) b u f ; \n f o r 302 240 ( i
0001060 = ( i f c o n f . i f c _ l e n
0001100 / s i z e o f 302 240 ( s t r u c t
0001120 302 240 i f r e q ) ) ; i > 0 ;
0001140 i - - ) \n { \n / / i f ( i f r
0001160 e q - > i f r _ f l a g s = =
0001200 A F _ I N E T ) { / / f o r
0001220 i p v 4 \n p r i n t f ( " n a
0001240 m e = % s \ n " , i f r
0001260 e q - > i f r _ n a m e ) ; \n p
0001300 r i n t f ( " l o c a l a d d
0001320 r = % s \ n " , i n e t _
0001340 n t o a ( ( ( s t r u c t 302 240 s
0001360 o c k a d d r _ i n * ) & ( i f
0001400 r e q - > i f r _ a d d r ) ) -
0001420 > s i n _ a d d r ) ) ; \n i f r
0001440 e q + + ; \n / / } \n } \n r e t
0001460 u r n 302 240 0 ; \n } \n \n
0001473
这样我们就可以看到游离的'\200' '\240' 等在哪了。