作者jacky1989 (幻想的夢境)
看板C_and_CPP
標題[問題] fopen的a+用法
時間Sat Oct 22 01:22:56 2011
開發平台(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
→ james732:把 fclose(fo) 移到 system("pause"); 之前試試 10/22 01:53
→ james732:另外fscanf(fo,"%s",&s); 改成 fscanf(fo,"%s",s);較好 10/22 01:53
→ tropical72:可以對同一個檔又讀又寫的嗎? 10/22 02:05
→ purincess:樓上 可以啊 + 就是這個用途 10/22 02:09
→ james732:我剛剛跑原po的程式是成功的...XD 10/22 02:10
→ cloudlim:原PO的scan會不會把s指向的位置蓋掉?@@" 10/22 02:18
→ purincess:不會, 在原文下&s跟&s[0]是...好吧我得小心講話..差不多 10/22 02:21
→ purincess:的 10/22 02:21
→ purincess:不知道欸 你的code我只有印出一次fscanf = 1和fputs=1 10/22 02:31
→ purincess:就結束了, which is expected.. 10/22 02:31
→ purincess:我的認知是a+的open會把 讀寫頭指到開始的地方 10/22 02:32
→ purincess:然後讀一次1出來之後fputs就會把讀寫頭移到檔案結束的 10/22 02:32
→ purincess:位址(a+的行為) 寫進去之後下次fscanf就讀到eof就結束了 10/22 02:32
→ tropical72:詳細還要研究一下。 10/22 02:41
→ purincess:附一下我的環境是ubuntu gcc-4.4.3 @@ 10/22 02:46
→ tropical72:a+ r+ w+ 查了一下,眾說紛云,且目前版上看到三種結果, 10/22 02:53
→ tropical72:懷疑 depends on os / compiler , 有空再 try try .. 10/22 02:53
→ james732:又要挖library來看了嗎...XD 不過今晚想休息 10/22 02:54
推 hilorrk:我也是一直在看spec,但是照理來說a保證write一定在EOF 10/22 20:14
→ hilorrk:寫出失敗代表+的這種特性會蓋過第5點? 10/22 20:16
→ loveme00835:有讀有寫, 共享同一個指針不意外 10/22 20:17
→ hilorrk:總覺得6不應該是蓋過5 output應該是要在EOF沒錯...input則 10/22 20:23
→ hilorrk:不一定...但如果是這樣 為何input會成功而output失敗 10/22 20:23
→ loveme00835:就踩線了阿, 仔細看我的連結 10/22 20:24
→ loveme00835:如果讀完還要幫你移到後面, 光想就知道會慢到炸 10/22 20:26
→ hilorrk:啊 我懂了 我一直把spec的input output想成位置 以為他只 10/22 20:26
→ hilorrk:想說input不一定在output後面 output不一定在input後面XD| 10/22 20:27
→ hilorrk:原來是說不能接著用...英文太爛 拍謝= =|| 10/22 20:28