string定义的长度是10,str1的最后一位默认为'\0',所以str1其实长度为11。strcpy()函数中,如果第二个串比第一个串长,是没有error的,第一个串的长度会增加,并且也可以正确的输出第一个串。
但是存在潜在的内存错误的问题,也就是说,在内存中,如果紧接string之后有内容,将被覆盖,这样会导致string之后的内存存取错误。
来看一个好的写法:
void test2()
char string[10], str1[10];
int i;
for(i=0; i<9; i++)
str1[i] = 'a';
str1[9] = '\0';//体现水平的一步
strcpy( string, str1 );
有的时候可能非常容易忽略这个小问题:
//例2
void test3(char* str1)
if(str1 == NULL){
return ;
char string[10];
if( strlen( str1 ) <= 10 )
strcpy( string, str1 );
这里if( strlen( str1 ) <= 10 )应该写成if( strlen( str1 ) < 10 ),因为strlen的结果未统计’\0’所占用的1个字节。