编译和执行-程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

偶尔从网上看到不错的源码,想研究下,不幸编译时遇到
“错误:程序中有游离的’\240”\302′”之类的错误,

首先,编译器提示的\xxx,都是8进制的编码,使用sed做下全文替换,命令如下:

sed -i 's/\o240\|\o302//g'  filename.cpp

\o指定用8进制编码,中间的\|是指要同时替换多个,这样就OK了。


刚才给你实验了一下:

sed 's/\x20//g' test.txt
# 这个命令表示将test.txt中,字符为0x20的字符替换为空。
# s表示替换,x20表示16进制0x20实际上空格,另外的空的表示替换为空,g表示全部。
# 实际就是把test.txt中的全部空格删除掉。
sed 's/aaa/bbb/g' test.txt  
# 将aaa替换为bbb。

这一般是“”,“”、,、;等符号使用错误,有时甚至是空格。

怎么解决呢?

很简单就是把他们一一改正,但很多不容易找怎么办?

可以使用linux 下的od命令加上重定向,

od详解:

Linux指令:od

# 示例用法:
od -c hello

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’ 等在哪了。

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments