面试点:字符串strcpy函数
C语言面试题分析之二
一.基本知识点
Strcpy(字符数组1,字符串2)
1.strcpy该函数是通过第二个参数的字符串的结束符来判断是否拷贝结束的;
2.strlen函数得到字符串的长度,是不包含字符串结束符的;
3.使用strcpy函数的时候,一定要注意第一个字符数组的大小至少不小于字符串2的大小,否则便是访问越界;
4.字符串2后面的`\0`也一同被复制到字符数组1中;
二.程序错误分析
程序片段一:
void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
}
这里string数组越界,因为str1字符的长度是10,还有一个结束符‘/0’。所以总共有11个字符长度。而string数组大小为10,所以就越界了。
PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。
程序片段二:
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是通过判断第二个参数的结束符来判断是否拷贝结束的。所以在for循环后面应加上str1p[9] = '/0';
PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符‘/0’。
程序片段三
void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
这里的问题仍是越界问题。strlen函数得到字符串的长度,是除结束符之外的。如果str字符串的长度正好等于10的话,就很明显越界了。