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);编译显示
将string[10]改为11,再添加strncopy(string,str1,11);编译显示

 

posted @ 2018-02-23 17:26  小雨滴答  阅读(161)  评论(0编辑  收藏  举报