关于strcpy_s源代码的问题

strcpy_s函数在拷贝字符串时,通过.VALIDATE_STRING和.VALIDATE_POINTER_RESET_STRING进行合法性检查和原始信息记录,以便在空间不足时恢复。当目标空间不足,它会在Debug模式下弹出错误对话框并尝试恢复。然而,有人疑问为何不先判断源字符串长度与目标空间,若目标空间小于字符串长度则直接避免拷贝,以简化错误处理流程。
摘要由CSDN通过智能技术生成
/*** 
*tcscpy_s.inl - general implementation of _tcscpy_s 
* 
*       Copyright (c) Microsoft Corporation. All rights reserved. 
* 
*Purpose: 
*       This file contains the general algorithm for strcpy_s and its variants. 
* 
****/
  
_FUNC_PROLOGUE 
errno_t __cdecl _FUNC_NAME(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC) 
{ 
    _CHAR *p; 
    size_t available; 
  
    /* validation section */
    _VALIDATE_STRING(_DEST, _SIZE); 
    _VALIDATE_POINTER_RESET_STRING(_SRC, _DEST, _SIZE); 
  
    p = _DEST; 
    available = _SIZE; 
    while ((*p++ = *_SRC++) != 0 && --available > 0) 
    { 
    } 
  
    if (available == 0) 
    { 
        _RESET_STRING(_DEST, _SIZE); 
        _RETURN_BUFFER_TOO_SMALL(_DEST, _SIZE); 
    } 
    _FILL_STRING(_DEST, _SIZE, _SIZE - available + 1); 
    _RETURN_NO_ERROR; 
}

 

_VALIDATE_STRING用来验证字符

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值