C++面试题
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy(string, str1);
}
解答:
字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;
虽然编译器不报错,但是应该认识到这个错误
strcpy 函数
这是strcnp函数的原型
char *strcpy(char *dest , const char *src );
char *strncpy(char *dest , const char *src , size_t n );
使用strcpy有个缺点:strcpy进行复制时,不进行数组越界的检查。
string数组只有10个字节,但是"0123456789\0"却有11个字节,这是很明显的数组越界,但是编译器编译没有报错,也就是ctrcpy复制是不进行数组越界的检查。要避免这个问题,可以使用strncpy ,因为strncpy有参数n来限定复制的字节数。
若不改变string[10],使用strbcopy(string,str1,10);编译显示
![](https://images2018.cnblogs.com/blog/988087/201802/988087-20180223172414187-302502671.png)
将string[10]改为11,再添加strncopy(string,str1,11);编译显示
![](https://images2018.cnblogs.com/blog/988087/201802/988087-20180223172448212-130459072.png)