编程语言专题《开发篇,C语言strcpy与strlen陷阱》
关于strcpy与strlen的探究,请找出下列错误:试题一void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}解答:字符串str1需要11个字节才能存放下(包括末尾的结束符),而string只有10个字节的空间,strcpy会导致数组越界。试题二void test.
·
关于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个字节。
更多推荐
所有评论(0)