字符串和字符数组

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。这样才能完成拷贝,且保证后面的拷贝不会导致数组越界。









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