作者ckclark (大資佬)
看板b98902HW
標題Re: [問題] 求助強者 "r+" 的奇怪現象
時間Sat Dec 5 01:22:49 2009
※ 引述《barry800414 (小銘)》之銘言:
: 本來我是打算讀書會把fopen 的參數都講一下
: 然實際的看有什麼現象發生
: 不過我今天試了好久
: 發現了奇怪的事情...
: 自己都爆炸了 XD
: #include<stdio.h>
: int main()
: {
: FILE *ptr;
: int data;
: ptr=fopen("in.txt","r+");
: fscanf(ptr,"%d",&data);
: fprintf(ptr,"test");
: fprintf(ptr,"%d\n",data);
: fclose(ptr);
: return 0;
: }
: in.txt的內容
: 第一種是只有123456
: 這六個字元 連換行都沒有
: 這個程式可以成功的讓in.txt的內容變成
: 123456test123456
: 第二種是123456這六個字元加一個換行
: 奇怪的事情發生了
: 跑完之後in.txt的內容還是123456
: 連"test" 都沒辦法輸出
: 而我看上課的講義上r+是這麼寫:
: Open an existing file for update (reading and writing)
: update的定義到底是什麼?
: 為什麼上面的程式在第二種狀況會這樣ˊˋ?
: 請諸位強者知道的幫忙一下 感激不盡
: 噢我是用devcpp 跑的 附檔名存.c
看起來是\r\n遺毒
在linux上跑起來是很正常的
看起來似乎是fscanf和fprintf算byte上的問題
他們會把\r\n當一個byte
檢驗一下fprintf的回傳值是-1 代表遇到了問題
不是很清楚細節
解決方法就是連後面換行也讀掉 用"%d "
--C2009 TA
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.44
1F:推 barry800414:感謝助教 12/05 01:28
2F:→ ckclark:這篇亂猜的 忽略它 12/05 02:13