void test1() { char string[10]; char *str1="0123456789"; strcpy(string, str1); }
//函數test1中,指針str1所指向的字符串有11個元素。必定要注意字符串是以'\0'爲結尾的,而strcpy拷貝了整個字符串包括'\0'。因此存在下標越界的問題。
數組
void test2() { char string[10],str1[10]; int i; for(i=0;i<10;i++) str1[i]='a'; strcpy(string, str1); }
//函數test2中,字符數組str1包含10個元素。數組str1並非以'\0'結束,因此不能做爲字符串使用。而strcpy函數是對字符串的操做,不能把一個不是字符串的字符數組傳遞給strcpy函數,由於源字符串的結束符'\0'是strcpy函數來判斷什麼時候結束拷貝的標識,當把str1傳入後,不能結束拷貝任務。
函數
void test3(char *str1) { char string[10]; if( strlen(str1)<=10 ) strcpy(string, str1); }
//函數test3中,用strlen得到了str1的長度,可是這個長度並不包括'\0'。因此這個長度是實際長度減1的值。因此在str3中應該把strlen(str1)<=0;改成strlen(str1)<10。這樣才能完成拷貝,且保證後面的拷貝不會致使數組越界。
指針