一:分析如下代碼
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'.越界了。所以字串雖然可以用字元數組來處理,但還是有所不同的。萬分注意。