迷璐的小强
2016-05-19 07:42
采纳率: 33.3%
浏览 1.4k
已采纳

vc 中用strcpy函数遇到的问题

小弟我在做strcpy函数的测试,代码如下
char pContent[20];
CString str = "qwertyuiopasdfghjklzxcvbnm1312311111111111111111111111111111111111111111111111111";
strcpy(pContent,str);
AfxMessageBox(pContent);

我很疑问,问啥我定义了长度给20的数组,str的长度明显是大于20的,为啥程序不会报错呢?编译环境为VC6.0。
请大神们解答一下
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2016-05-19 07:43
    已采纳

    因为strcpy不会对缓冲区是否越界做出检查。所以这样的代码照样可以编译运行,但是显然结果不可预料。
    特别指出,strcpy不应该使用,应该用strncpy和strcpy_s代替。

    已采纳该答案
    打赏 评论
  • lbcab 2016-05-19 10:15
     char * strcpy(char *dst,const char *src)   //[1]
    {
        assert(dst != NULL && src != NULL);    //[2]
    
        char *ret = dst;  //[3]
    
        while ((*dst++=*src++)!='\0'); //[4]
    
        return ret;
    }
    

    strcpy的代码:
    从实现代码上看, strcpy不会对缓冲区是否做越界处理, 在while ((*dst++=*src++)!='\0') 中是根据src的值来结束while循环, 并不去
    检查src的长度大于dst的长度

    打赏 评论
  • 忧伤的熊二 2016-05-20 06:35

    拷贝的字符串没有结束标志

    打赏 评论

相关推荐 更多相似问题