void test2()
{
char str1[10], str2[10];
int i;
for(i=0; i<10; i++)
str1[i] = 'a';
strcpy( str2, str1 );
}
这段代码有什么问题?
解答:如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(str2, str1)调用使得从str1复制到str2的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分。
str1不能在数组内结束:因为str1的存储为:{a,a,a,a,a,a,a,a,a,a},没有'\0'(字符串结束符),所以不能结束
strcpy(char *s1,char *s2)他的工作原理是,扫描s2指向的内存,逐个字符付到s1所指向的内存,直到碰到'\0',因为str1结尾没有'\0',所以具有不确定性,不知道他后面还会付什么东东。
正确应如下:
void test2()
{
char str1[10], str2[10];
int i;
for(i=0; i<9; i++)
{
str1[i] = 'a'+i; //把abcdefghi赋值给字符数组
}
str[i]='\0';//加上结束符
strcpy( string, str1 );
}