在写程序时,有时候编译器需要程序必须是英文输入,但大家经常切到中文或者直接复制网络上的源代码,所以就出现了
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' 等在哪了。