strcpy与strlen陷阱

关于strcpy与strlen的探究,请找出下列错误:

试题一
void test1()
{
 char string[10];
 char* str1 = "0123456789";
 strcpy( string, str1 );
}

解答:字符串str1需要11个字节才能存放下(包括末尾的结束符),而string只有10个字节的空间,strcpy会导致数组越界。

试题二
void test2()
{
 char string[10], str1[10];
 int i;
 for(i=0; i<10; i++)
 {
  str1[i] = 'a';
 }
 strcpy( string, str1 );
}

解答:str1数组没有字符串结束符,不能算是一个字符数组,而strcpy只能对字符串进行拷贝。

试题三
void test3(char* str1)
{
 char string[10];
 if( strlen( str1 ) <= 10 )
 {
  strcpy( string, str1 );
 }
}

解答:if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计’结束符所占用的1个字节。

你可能感兴趣的:(C/C++)