string轉int類型:坑貨stoi的替代者strtol

string maxFrameRate = to_string(stoi(maxFrameRate)*100);
//上述代碼在轉換時如果maxFrameRate爲“dad66”這樣的字符串而不是純數字字符串,
//那麼就會導致程序直接掛掉,並無異常處理機制

//正品:long int strtol(const char *nptr, char **endptr, int base)
string maxFrameRate = to_string(strtol(maxFrameRate.c_str(), NULL, 10)*100);
//這樣就不會直接崩掉了,“dad66”這樣的字符串會被直接轉化爲0,“66dad”這樣的字符串會被轉化爲66

strtol()函數檢測到第一個非法字符時,立即停止檢測,其後的所有字符都會被當作非法字符處理。合法字符串會被轉換爲long int, 作爲函數的返回值。非法字符串,即從第一個非法字符的地址,被賦給*endptr。**endptr是個雙重指針,即指針的指針。strtol()函數就是通過它改變*endptr的值,即把第一個非法字符的地址傳給endptr。多數情況下,endptr設置爲NULL, 即不返回非法字符串。下述三個例子引自https://blog.csdn.net/zxx2096/article/details/81127858

char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 2));
printf("%s\n", stop);
輸出結果:
2
379cend$3
char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 10));
printf("%s\n", stop);
輸出結果:
10379
cend$3

對於nptr指向的字符串,其開頭和結尾處的空格被忽視,字符串中間的空格被視爲非法字符。

char buffer_1[20]="10379c";
char buffer_2[20]="      10379c        ";
char buffer_3[20]="      10      379c        ";
printf("%d\n",strtol(buffer_1,NULL,0));
printf("%d\n",strtol(buffer_2,NULL,0));
printf("%d\n",strtol(buffer_3,NULL,0));
輸出結果爲:
10379
10379
10

 

發佈了40 篇原創文章 · 獲贊 16 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章