[問題] fopen的a+用法

看板C_and_CPP作者 (幻想的夢境)時間14年前 (2011/10/22 01:22), 編輯推噓1(1030)
留言31則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 嘗試可任意讀出寫入一個文字檔 錯誤結果(Wrong Output): 不會執行 程式碼(Code):(請善用置底文網頁, 記得排版) #include<stdlib.h> #include<stdio.h> int main(){ char s[255]; FILE *fo; fo=fopen("addr.txt","a+"); if(fo==NULL) exit(0); fscanf(fo,"%s",&s); //此行有讀出來 fprintf(fo,"%s\n",s); //這一行不會執行,因為文字檔沒有被寫入 system("pause"); fclose(fo); return 0; } 我如果把fscanf那一行拿掉fprintf就可以正確執行了 而這程式是正常的 我該怎麼解決那問題?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.90.247

10/22 01:53, , 1F
把 fclose(fo) 移到 system("pause"); 之前試試
10/22 01:53, 1F

10/22 01:53, , 2F
另外fscanf(fo,"%s",&s); 改成 fscanf(fo,"%s",s);較好
10/22 01:53, 2F

10/22 02:05, , 3F
可以對同一個檔又讀又寫的嗎?
10/22 02:05, 3F

10/22 02:09, , 4F
樓上 可以啊 + 就是這個用途
10/22 02:09, 4F

10/22 02:10, , 5F
我剛剛跑原po的程式是成功的...XD
10/22 02:10, 5F

10/22 02:18, , 6F
原PO的scan會不會把s指向的位置蓋掉?@@"
10/22 02:18, 6F

10/22 02:21, , 7F
不會, 在原文下&s跟&s[0]是...好吧我得小心講話..差不多
10/22 02:21, 7F

10/22 02:21, , 8F
10/22 02:21, 8F

10/22 02:22, , 9F
是我人品問題嗎? http://codepad.org/9xFAr4bx XD
10/22 02:22, 9F

10/22 02:31, , 10F
不知道欸 你的code我只有印出一次fscanf = 1和fputs=1
10/22 02:31, 10F

10/22 02:31, , 11F
就結束了, which is expected..
10/22 02:31, 11F

10/22 02:32, , 12F
我的認知是a+的open會把 讀寫頭指到開始的地方
10/22 02:32, 12F

10/22 02:32, , 13F
然後讀一次1出來之後fputs就會把讀寫頭移到檔案結束的
10/22 02:32, 13F

10/22 02:32, , 14F
位址(a+的行為) 寫進去之後下次fscanf就讀到eof就結束了
10/22 02:32, 14F

10/22 02:40, , 15F
我竟然要這麼做才可以 http://codepad.org/W7oUgEti
10/22 02:40, 15F

10/22 02:41, , 16F
詳細還要研究一下。
10/22 02:41, 16F

10/22 02:46, , 17F
附一下我的環境是ubuntu gcc-4.4.3 @@
10/22 02:46, 17F

10/22 02:53, , 18F
a+ r+ w+ 查了一下,眾說紛云,且目前版上看到三種結果,
10/22 02:53, 18F

10/22 02:53, , 19F
懷疑 depends on os / compiler , 有空再 try try ..
10/22 02:53, 19F

10/22 02:54, , 20F
又要挖library來看了嗎...XD 不過今晚想休息
10/22 02:54, 20F

10/22 20:06, , 21F
10/22 20:06, 21F

10/22 20:14, , 22F
我也是一直在看spec,但是照理來說a保證write一定在EOF
10/22 20:14, 22F

10/22 20:16, , 23F
寫出失敗代表+的這種特性會蓋過第5點?
10/22 20:16, 23F

10/22 20:17, , 24F
有讀有寫, 共享同一個指針不意外
10/22 20:17, 24F

10/22 20:23, , 25F
總覺得6不應該是蓋過5 output應該是要在EOF沒錯...input則
10/22 20:23, 25F

10/22 20:23, , 26F
不一定...但如果是這樣 為何input會成功而output失敗
10/22 20:23, 26F

10/22 20:24, , 27F
就踩線了阿, 仔細看我的連結
10/22 20:24, 27F

10/22 20:26, , 28F
如果讀完還要幫你移到後面, 光想就知道會慢到炸
10/22 20:26, 28F

10/22 20:26, , 29F
啊 我懂了 我一直把spec的input output想成位置 以為他只
10/22 20:26, 29F

10/22 20:27, , 30F
想說input不一定在output後面 output不一定在input後面XD|
10/22 20:27, 30F

10/22 20:28, , 31F
原來是說不能接著用...英文太爛 拍謝= =||
10/22 20:28, 31F
文章代碼(AID): #1EeQfocZ (C_and_CPP)