字符串和字符數組

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。這樣才能完成拷貝,且保證後面的拷貝不會導致數組越界。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章