问题描述
- vc 中用strcpy函数遇到的问题
-
小弟我在做strcpy函数的测试,代码如下
char pContent[20];
CString str = "qwertyuiopasdfghjklzxcvbnm1312311111111111111111111111111111111111111111111111111";
strcpy(pContent,str);
AfxMessageBox(pContent);我很疑问,问啥我定义了长度给20的数组,str的长度明显是大于20的,为啥程序不会报错呢?编译环境为VC6.0。 请大神们解答一下
解决方案
因为strcpy不会对缓冲区是否越界做出检查。所以这样的代码照样可以编译运行,但是显然结果不可预料。
特别指出,strcpy不应该使用,应该用strncpy和strcpy_s代替。
解决方案二:
只是一个函数的问题strcpy
解决方案三:
char * strcpy(char *dst,const char *src) //[1]
{
assert(dst != NULL && src != NULL); //[2]
char *ret = dst; //[3]
while ((*dst++=*src++)!=''); //[4]
return ret;
}
strcpy的代码:
从实现代码上看, strcpy不会对缓冲区是否做越界处理, 在while ((*dst++=*src++)!='') 中是根据src的值来结束while循环, 并不去
检查src的长度大于dst的长度
解决方案四:
拷贝的字符串没有结束标志
时间: 2025-01-01 02:51:24