2019年5月24日 星期五

C code 冷知識 - argc and argv

程式寫久了,都會有一些感覺很理所當然的事,等到真正去寫,才會發現事情不是我們想的那樣!

最近在測試 C regex Library,為了方便 runtime 取得 pattern,故需要從 argv 取得想要的 pattern。原本以為我們需要自己去處理雙引號括起來的字串,故先寫支簡單的程式確認 argv 的字串是什麼?沒想到傳進去的 argv 已沒有雙引號。

原先以為這個是 C 的 implement,故先查了一下 C11 Draft Spec,發現裡面並沒有規定此原則。


後來才想到,這個應該是作業系統處理掉的,以我的環境來說就是 Windows cmd。

那如果我們真的需要前後的雙引號呢?可以使用 "\" 去 escape 雙引號,不過,因為雙引號已失去意義,故裡面的字串如果有空白,argv 的組成就不會跟原本的一樣了。


Windows 下有個 Win API - GetCommandLine,透過它就可以取得原始的一整個字串。


Test.exe "abc" def

GetCommandLine -> (Test.exe "abc" def)

沒有留言:

張貼留言