背景:要做的程序是跨平臺的,而且對於一個字符串需要大小寫不敏感。所以想到的辦法是都轉成大寫。在windows下有把字符串轉大寫的函數strupr,但是在linux下卻沒有,於是上網一搜,搜到一段代碼
#ifndef WIN32
char *strupr(char *str){
char *orign=str;
for (; *str!='\0 '; str++)
*str = toupper(*str);
return orign;
}
#endif
放在程序裏,開始跑到還行,但是後來就經常不定期崩潰。
通過打印定位,就是崩潰在這個函數裏。
瞪大了眼睛,查了半天,終於看到了*str!='\0 ',這裏在0後面多了一個空格。
導致直接飛了。
把空格去掉,一切正常了。
教訓:從網頁上覆制來的代碼一定要好好分辨,仔細檢查,尤其是空格,很難發現。