[英]Is char variable always represented as dereferenced char*[2] with {'x',\0}?
我試過這種方法將一個char位數轉換為一個整數('3'-> 3),它似乎起作用。
char c='x';
int i=atoi(&c);
我的問題是,這將始終有效嗎?
在第一個字符之后是否總是有NULL字符?
還有另一種使用隱式類型轉換的方法,但是我不確定這是一個好習慣。 實際上,我非常驚訝,即使使用-Wall和-Wextra也沒有警告。
int i = c - '0';
注意我正在使用GCC 4.8.2和MinGW。
atoi
期望null終止的C字符串。
由於未提供(您提供了指向字符的指針),因此這是未定義的行為。
對於第二行代碼-如果可以保證字符確實是數字,通常可以使用。 例如,字符#
將產生結果,但可能不會產生您期望的結果。
一些解決方案是使用std::stoi
:
try{ int x = std::stoi(std::string() + c) } catch(...) {/*handle*/}
只要在分配c的內存空間旁邊為\\ 0,它就可以工作。 換句話說,這只是運氣。 您應該使用int i = c - '0'
但是請注意,每個字符都將映射到int(fe int i = 'a' - '0'
)
為了避免這種情況,您可以執行以下操作:
int i = c=>'0' && c<='9' ? c-'0' : -1; //-1 represents not valid values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.