关于strcpy_s源代码的问题
来源:互联网 发布:dnf tp技能详细数据 编辑:程序博客网 时间:2024/06/02 06:11
/*** *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用来验证字符串的合法性,是否以null结尾。
_VALIDATE_POINTER_RESET_STRING是记录字符串的原始信息,以便拷贝失败以后恢复。
当目的地空间不够时,会根据_VALIDATE_POINTER_RESET_STRING记录的信息恢复字符串,并且(在Debug模式下)以弹出对话框的形式报告错误。
_FILL_STRING完成在字符串最后加上null结束符的工作。
但是有一个疑问需要各位高手解答,为什么微软的源代码不首先判断源字符串的长度与目的空间长度,如果目的空间长度小于字符串的长度,就不拷贝,这样也就省去了记录原始字符串信息以及需要恢复信息的麻烦。
- 关于strcpy_s源代码的问题
- strcpy与strcpy_s的问题
- VS2012使用strcpy_s的问题
- 关于strcpy_s
- 关于strcpy_s
- 关于strcpy_s
- 在C++里面关于strcpy()函数和strcpy_s()函数的问题
- 关于strcpy和strcpy_s安全方面比较问题?
- CRT函数相关问题,gets_s和strcpy_s的用法
- strcpy_s的用法
- strcpy_s的坑
- strcpy_s、strcat_s的用法
- 关于hierachyViewer源代码导入运行的问题
- strcpy_s
- strcpy_s
- strcpy_s
- strcpy_s
- strcpy_s
- Spring MVC 3 深入总结
- FS_S5PC100平台上Android Camera架构分析
- 慢慢发现,我在退步
- poj 2465 Adventures in Moving - Part IV
- 配置IIS支持asp.net
- 关于strcpy_s源代码的问题
- 【转】Spring @Transactional 声明式事务管理 getCurrentSession
- php _REQUEST变量的使用
- resin的watchdog
- 软件工程师在职业生涯中说的32句话
- AO+C++实现唯一值渲染
- VIM 操作
- Memcached内存分配策略
- 内存对齐的初步讲解