字符串拷贝函数使用注意事项
来源:互联网 发布:微信导入数据库失败 编辑:程序博客网 时间:2024/06/03 12:43
温辉敏(wenhm@sina.com) 2008-7-30
摘要:本文简单介绍了Windows平台下C和C++编程时,字符串操作函数的一些注意事项。
作者博客:http://blog.csdn.net/wenhm/
看到大家在代码中有很多用wcscpy、strcpy等的,这里总结下给大家参考下,希望对大家有帮助(这里的API都是windows平台下的,linux下的应该也有类似的替换函数):
l _tcscpy、_tcscpy_s 都是不安全的,换成_tcsncpy /_tcsncpy_s好些,最好用_tcsncpy_s
l wcscpy、wcscpy_s都是不安全的,换成wcsncpy / wcsncpy_s好些,最好用wcsncpy_s
非unicode 函数类似,linux版本类似。
下面是一些会导致出错的代码,直接都可以运行的,有兴趣的可以试试。
#define PARRAYSIZE(array) ((sizeof(array)/sizeof(array[0])))
void CWindowsApiTest::testwcscpy()
{
WCHAR strBuf1[] = L"你是一个好人!你是一个好人!";
WCHAR strBuf2[10] = {0};
wcscpy(strBuf2, strBuf1);
int iStrLen = wcslen(strBuf2);
bool bResult = (iStrLen <= 10);
CPPUNIT_ASSERT_EQUAL_MESSAGE("内存越界了!iStrLen变成14了.", bResult, true);
}
void CWindowsApiTest::testwcscpy_s()
{
WCHAR strBuf1[] = L"你是一个好人!你是一个好人!";
WCHAR strBuf2[10] = {0};
wcscpy_s(strBuf2, 10, strBuf1);
int iStrLen = wcslen(strBuf2);
bool bResult = (iStrLen <= 10);
CPPUNIT_ASSERT_EQUAL_MESSAGE("内存越界了!但是Debug版本会提示用户越界", bResult, true);
}
void CWindowsApiTest::testwcsncpy()
{
WCHAR strBuf1[] = L"你是一个好人!你是一个好人!";
WCHAR strBuf2[10] = {0};
wcsncpy(strBuf2, strBuf1, PARRAYSIZE(strBuf2));
int iStrLen = wcslen(strBuf2);
bool bResult = (iStrLen <= 10);
CPPUNIT_ASSERT_EQUAL_MESSAGE("内存越界了!没有地方放置结束符,iStrLen:28,正确用法:wcsncpy(strBuf2, strBuf1, PARRAYSIZE(strBuf2)-1);", bResult, true);
}
void CWindowsApiTest::testwcsncpy_s()
{
WCHAR strBuf1[] = L"你是一个好人!你是一个好人!";
WCHAR strBuf2[10] = {0};
wcsncpy_s(strBuf2, PARRAYSIZE(strBuf2), strBuf1, PARRAYSIZE(strBuf2) );
int iStrLen = wcslen(strBuf2);
bool bResult = (iStrLen <= 10);
CPPUNIT_ASSERT_EQUAL_MESSAGE("内存越界了!正确用法:wcsncpy_s(strBuf2, PARRAYSIZE(strBuf2), strBuf1, PARRAYSIZE(strBuf2) - 1);", bResult, true);
}
- 字符串拷贝函数使用注意事项
- C++堆栈实现及拷贝构造函数的使用注意事项
- C++字符串拷贝函数
- 字符串拷贝函数
- C++字符串拷贝函数
- [转]字符串拷贝函数
- 字符串拷贝函数
- 字符串拷贝函数
- 字符串拷贝函数
- strcpy字符串拷贝函数
- 字符串拷贝函数分析
- 字符串拷贝函数
- 字符串拷贝函数strcpy()
- 字符串拷贝函数strcpy()
- strncpy字符串拷贝函数
- 字符串拷贝函数
- c++的坑--字符串内存拷贝注意事项
- 字符串函数注意事项
- FAT12文件系统基本格式
- 反汇编深入分析函数调用
- 程序员30岁以后的发展迷途
- 应聘中遇到的bom
- 雨,疯狂地下
- 字符串拷贝函数使用注意事项
- SD&MM正向流程
- Java调用批处理或可执行文件
- 应聘中的MRP
- Windows Mobile开发资源介绍
- NFS相关命令失效问题
- 门户通专访张博士:谈生物谷成长之道
- c# 数学表达式分析(采用逆波兰方式实现)
- 门户通专访任务中国CEO钟聪华:谈网站的发展史