C/C++易錯總結

來源:互聯網
上載者:User

一:分析如下代碼

char* toStr(int num){char s[100];int i = 0;while(num > 0){s[i++] = num % 10 + '0';//記住為什麼+'0'num /= 10;}s[i] = '\0';return s;}

本意為將整數轉化成字元數組儲存,然後將這個字元數組返回。經艱苦實踐,發現不能,原因是指標s是局部變數,當函數返回時s即銷毀,當然不會返回成功了,只能把一個無意義的地址傳回去。

所以正確的處理方法可以這樣。

void toStr(int num, char *s){int i = 0;while(num > 0){s[i++] = num % 10 + '0';num /= 10;}s[i] = '\0';}

當然這樣就需要傳進一個s了。當然會後指標s的生命週期尚未結束,故不會出錯。值得總結。

二:讀以下代碼

char *s;{//這裡面是對s[i]的訪問和處理}

這段代碼編譯通過,運行就有問題了,想用指標對字串做處理,可以先定義好字元數組,然後再用指標。也就是必須出現char s[const]這樣的聲明之後才可用指標訪問使用。

三:代碼如下

#include<iostream>using namespace std;char *ch(char *str1, char *str2){    char *p;    p = str2;       while(*str1 != NULL){         *str2 = *str1;        str1++;        str2++;    };    *str2 = '\0';    return p;}int main(){      char str1[]="I am glad to meet you!";    char str2[50];    cout << str2 << endl;    cout << ch(str1, str2) << endl;    cout << str2 << endl;     return 0;}

在第14行注釋與不注釋的情況下,進行測試。
不注釋的時候發現輸出尾部總混有str1的成分,這是為什麼呢?原因是我們聲明str2是以字元數組,而用字元數組處理字串時,最為重要的問題就是結束符'\0'。如果不告訴str2結束部分,那麼輸出的時候,str2就會一直往後查直到發現'\0'.可是最後卻找到的是str1的'\0'.越界了。所以字串雖然可以用字元數組來處理,但還是有所不同的。萬分注意。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.