[問題] strtod 的引數設計

看板C_and_CPP (C/C++)作者 (麵T)時間10年前 (2016/04/13 20:29), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/1
大家好, double strtod (const char* str,char** endptr); strtod 可以用來解析浮點數,並且得到解析完後「游標位置」 方便我們再做其它字串處理。 http://www.cplusplus.com/reference/cstdlib/strtod/ 如同上面網址中的 d2 = strtod (pEnd, NULL); 而它只是要指到游標位置, 並不會修改內容,例如 **endptr = 'a' 為什麼 endptr 不加 const 修飾? 加 const 修飾,是可以通過編譯的 http://ideone.com/o2uhO8 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.227.207.223 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460550553.A.9F6.html

04/13 21:39, , 1F
設計上是為了方便起見,假使真的想要修改 **endptr
04/13 21:39, 1F

04/13 21:42, , 2F
比如說 **endptr = '\0'; 但也暴露著對 string literal
04/13 21:42, 2F

04/13 21:42, , 3F
修改的風險
04/13 21:42, 3F

04/13 21:54, , 4F
但第一個引數 *str 已經加了 const , **endptr 指向它,
04/13 21:54, 4F

04/13 21:54, , 5F
照道理來說不是不能將常數指標賦予給普通指標?
04/13 21:54, 5F

04/13 22:37, , 6F
因為第一個引數可能本體不是 const char * 而是 char *
04/13 22:37, 6F

04/13 22:39, , 7F
剛找了一下 SO 上也有類似的討論 http://goo.gl/SEuTPz
04/13 22:39, 7F

04/13 22:49, , 8F
http://goo.gl/hfGz4u 討論串看完的結論就是折衷設計
04/13 22:49, 8F
文章代碼(AID): #1N3ZkPds (C_and_CPP)
文章代碼(AID): #1N3ZkPds (C_and_CPP)