亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  size_t和unsigned int傻傻不區分?

size_t和unsigned int傻傻不區分?

時間:2024-02-13

一. 前面的話

上次洪哥跟我說,希望多寫一些bug調試和踩坑經驗的文章。沒問題,反正我是挺會寫bug的。

在C++相關的開發中,有的朋友對一些基本的概念很模糊,用的時候也不注意,然后就呵呵噠了。

我自己也偶爾有這樣的問題,之前用C++寫了一個程序,在測試環境自測無問題,上線后就跪了。


二. bug程序

為了便于敘述,我對原程序進行簡化,如下:

#include <iostream>using namespace std;
string getCutRemark(const string &strRemark){ string strTmp = strRemark; unsigned int pos = strTmp.find("|"); if(pos != string::npos) { strTmp.erase(strTmp.begin() + pos, strTmp.end()); } cout << strTmp << endl;   return strTmp;}
int main(){ getCutRemark("abc|def"); // ok getCutRemark("abc"); // error cout << "ending" << endl; return 0;}

這個程序的功能很簡單,意思就是要去掉分隔符和后面的字符。思路是:先找到分隔符,然后刪除分隔符到結尾的字符。

我當時在測試環境做了測試,可是一上線就出問題。為什么呢?因為我沒有區分size_t和unsigned int, 它們是不同的。

在不同自己的機器上,size_t的大小是不同的,我當時的測試機器是32位,此時size_t和unsigned int等價,所以OK. 

但是,線上是64位機器,用unsigned int就錯了,看看find函數的返回值類型就知道了,很明顯存在精度丟失問題。


三. 修復bug

修復代碼,再次驗證,就OK了,正確的程序如下:

#include <iostream>using namespace std; string getCutRemark(const string &strRemark){    string strTmp = strRemark;    size_t pos = strTmp.find("|");    if(pos != string::npos)    {      strTmp.erase(strTmp.begin() + pos, strTmp.end());    }     cout << strTmp << endl;    return strTmp;}  int main(){    getCutRemark("abc|def");  // ok    getCutRemark("abc");      // ok      cout << "ending" << endl;    return 0;}


四. 趣味結尾

最后,我們來聊2個有趣但無聊的筆試題。說有趣,是因為很多會C++的人,可能掉進陷阱。說無聊,是因為實際開發中,根本不會遇到這種問題。

不要總是想著學習和進步,偶爾娛樂一下,也挺好的。我們需要從生活和工作中,找到一些樂趣,聊作吹水談資。一起來看看,這些題目你能做對嗎?


題目一:

請看程序:

#include <iostream>using namespace std;
int main(){ http://www.baidu.com int a = 1; int b = 2; int c = a + b;
cout << c << endl; return 0;}

下列說法正確的是:

A.  編譯出錯     B. 運行出錯

C.  c值為3        D. 以上都錯


題目二:

請看程序:

#include <iostream>using namespace std;
int main(){ int a = 1; int b = 2; int *p = &b; int c = a/*p;
cout << c << endl; return 0;}

下列說法正確的是:

A.  編譯出錯     B. 運行出錯

C.  c值為0        D. 以上都錯


請注意, C++水平不錯的同學,很可能做錯這兩個題目哦。歡迎在評論區討論。最后,祝周末愉快,開心一刻。

·················· END ··················

點擊關注公眾號,免費領學習資料

你好,我是濤哥,CSDN排名第一。

自學計算機,畢業后就職華為騰訊。

從事軟件開發,期待與你一起成長。
推薦閱讀
雜文薈萃
職場進階
面試刷題
編程之路
點“贊”和“在看”哦
主站蜘蛛池模板: 凤凰县| 永靖县| 梧州市| 正宁县| 靖西县| 沛县| 衡山县| 临泽县| 玉溪市| 文成县| 偃师市| 珠海市| 溧水县| 开阳县| 老河口市| 凤台县| 永昌县| 石柱| 犍为县| 岳西县| 班玛县| 和平区| 绥阳县| 丘北县| 库尔勒市| 通河县| 栖霞市| 鹤岗市| 泰顺县| 东台市| 海盐县| 铁力市| 天峻县| 安仁县| 彭山县| 鹤岗市| 五指山市| 阜南县| 海口市| 乌兰察布市| 临泉县|