c语言文件读取

C、C++和Java语言
回复
chuzhufei
帖子: 35
注册时间: 2009-04-01 8:50
送出感谢: 0
接收感谢: 0

c语言文件读取

#1

帖子 chuzhufei » 2009-04-09 17:01

我的一个程序读取一个txt文件,在Windows下能得到正确的结果,但在Ubuntu下却不行
读取的文件格式如下: .v 50 51 52 53 54 55 56 57 58 59 60
我用fgetc 读取,当读到换行符时结束循环,但总得不到正确的结果,在60后面还能读到0 0 0 1 0 0。。。
是不是文件格式不同啊,在linux下怎样查看二进制文件啊?
期待回答
头像
wzssyqa
帖子: 4010
注册时间: 2008-04-07 17:36
来自: 泰安人在阜新
送出感谢: 0
接收感谢: 0

Re: c语言文件读取

#2

帖子 wzssyqa » 2009-04-09 17:35

可能是因为win的换行格式和unix不同,win下是一个换行加个回车,unix只有一个换行
贴出代码来瞧瞧
kamasamikon
帖子: 57
注册时间: 2009-01-05 11:42
送出感谢: 0
接收感谢: 0

Re: c语言文件读取

#3

帖子 kamasamikon » 2009-04-09 17:54

od 先看看原始文件的数据是什么吧。
chuzhufei
帖子: 35
注册时间: 2009-04-01 8:50
送出感谢: 0
接收感谢: 0

Re: c语言文件读取

#4

帖子 chuzhufei » 2009-04-09 19:02

读入的文件:
节选
.i 16
.o 1
.p 10917
.v 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

C 语言代码:
ch=fgetc(fp);

while ((ch1=fgetc(fp))!=EOF)

{

if (ch==0x2e&&ch1==0x76) /*当读到文件是.v的时候,记录下后面的节点标号*/

{ ++n;

while ((ch2=fgetc(fp))!=0x0a) /*当不是遇见换行符时继续循环*/

{

fgets(str,3,fp);

save=atoi(str);

input_pad_num=save;

i++;

printf("the record is %d\n",save);

}

}

以上代码在win 下完全没问题的。。。可是在Linux下不行。请赐教
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: c语言文件读取

#5

帖子 xhy » 2009-04-09 19:09

用二进制方式打开文件试试
目前负债150多万
chuzhufei
帖子: 35
注册时间: 2009-04-01 8:50
送出感谢: 0
接收感谢: 0

Re: c语言文件读取

#6

帖子 chuzhufei » 2009-04-09 19:15

xhy 写了:用二进制方式打开文件试试
尝试过了 不行阿
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: c语言文件读取

#7

帖子 xhy » 2009-04-09 19:26

chuzhufei 写了:
xhy 写了:用二进制方式打开文件试试
尝试过了 不行阿
你的文件必须保存成 \r\n 或者 \n , 读到时候方法要一致

windows记事本保存的文件默认是\r\n的
目前负债150多万
chuzhufei
帖子: 35
注册时间: 2009-04-01 8:50
送出感谢: 0
接收感谢: 0

Re: c语言文件读取

#8

帖子 chuzhufei » 2009-04-09 20:08

xhy 写了:
chuzhufei 写了:
xhy 写了:用二进制方式打开文件试试
尝试过了 不行阿
你的文件必须保存成 \r\n 或者 \n , 读到时候方法要一致

windows记事本保存的文件默认是\r\n的
哦 成功了 谢谢
把ch2=fgetc(fp)==0x0d 就行了。。。。
回复

回到 “C/C++/Java”