[問題] C語言 使用 sscanf()函數

看板C_and_CPP作者 (Rpdk)時間12年前 (2011/08/29 21:39), 編輯推噓2(2013)
留言15則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我這幾天需要讀出一個資料夾的檔案名 我已經順利可以讀出了 例如: a.txt b.txt c.txt 但 我只需要 a 這個字串 我試著使用 sscanf("a.txt","%s.bmp",str); 結果 : str = a.txt 我上網查一下 : 似乎必須使用 %[^] 這類判斷式 我把程式 改成 sscanf("a.txt","%[^.]",str); 結果 : str = a 這樣看似解決我的問題了 但 如果檔名是 1.a.txt sscanf("1.a.txt","%[^.]",str); 結果 : str = 1 他似乎讀到第一個 '.' 就停止了 如果我想要完成我的需求 我的判別式 要怎麼寫呢 查了好久 還是解不出來 還麻煩各位大大給予指導 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.10.200

08/29 21:43, , 1F
我看完說明,還是看不懂你的需求為何,格式有三種,所以?
08/29 21:43, 1F

08/29 21:43, , 2F
你有搞懂%[^]的意思嗎
08/29 21:43, 2F

08/29 21:45, , 3F
而且假如你只需要a 這個字串 那為何不直接str = "a"
08/29 21:45, 3F

08/29 21:46, , 4F
抱歉 我可能打的比較糟糕. 最簡單來說 我想取出 1.a 這種檔名
08/29 21:46, 4F

08/29 21:46, , 5F
延伸副檔名都相同嗎?
08/29 21:46, 5F

08/29 21:47, , 6F
因為 我那個資料夾裡有很多檔 而且檔名又沒規則 想在沒改檔名
08/29 21:47, 6F

08/29 21:48, , 7F
前提下取出檔名 副檔名都是 txt 謝謝
08/29 21:48, 7F

08/29 21:58, , 8F
sscanf 應辦不到,因貪婪法則關係,建議自己另寫一隻。
08/29 21:58, 8F

08/29 22:04, , 9F
strrchr
08/29 22:04, 9F

08/29 22:07, , 10F
記得include string.h
08/29 22:07, 10F

08/29 22:26, , 11F
如果是我就直接把後面四個byte直接換掉...= =|||
08/29 22:26, 11F

08/29 22:47, , 12F
strndup(str, strrchr(str, '.') - str)
08/29 22:47, 12F

08/29 22:48, , 13F
回傳的東西要自己free
08/29 22:48, 13F

08/29 23:36, , 14F
硬要用 sscanf 的話,可以把檔名 reverse 拿去 sscanf
08/29 23:36, 14F

08/29 23:36, , 15F
得到 str 後,再把 str reverse 回來就是你要的結果 XD
08/29 23:36, 15F
文章代碼(AID): #1EMvPyDI (C_and_CPP)