[問題] strtod 的引數設計

作者: noodleT (麵T)   2016-04-13 20:29:07
大家好,
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
作者: LiloHuang (十年一刻)   2016-04-13 21:39:00
設計上是為了方便起見,假使真的想要修改 **endptr比如說 **endptr = '\0'; 但也暴露著對 string literal修改的風險
作者: noodleT (麵T)   2016-04-13 21:54:00
但第一個引數 *str 已經加了 const , **endptr 指向它,照道理來說不是不能將常數指標賦予給普通指標?
作者: LiloHuang (十年一刻)   2016-04-13 22:37:00
因為第一個引數可能本體不是 const char * 而是 char *剛找了一下 SO 上也有類似的討論 http://goo.gl/SEuTPzhttp://goo.gl/hfGz4u 討論串看完的結論就是折衷設計

Links booklink

Contact Us: admin [ a t ] ucptt.com