关于字符串数组 TCHAR char WCHAR

定义一个字符串数组要注意哪些东西呢?
 
以TCHAR为例
const int g_nArraySize = 256;
TCHAR* pszTemp = new TCHAR[nArraySize];

现在我们该做什么呢,直接使用数组吗
不是!
 
1. 初始化,当然我们可以选用for循环初始化,不过实在是代码过长
memset(pszTemp, '/0', g_nArraySize);
一句搞定。。
在此后我们使用这个数组的时候一定要注意,最好能时刻使得数组的最后一个元素保持为结束符
其实只需我们在使用数组的时候始终只使用前g_nArraySize - 1个字符就行了;
当然可以在定义时候使用 g_nArraySize + 1,这样避免以后使用时常常要减1操作

ReadFile(hFile, pszBuffer, ( g_nArraySize - 1),  &dwReadSize,  NULL);
尤其是在while或for循环中重复使用某个字符串数组的时候,一定要记得在合适的时候初始化
否则极可能受上次字符串数组的影响。
 
2. 当拷贝字符串的时候推荐使用strcpy_s,而不是strcpy,
因为strcpy中没有控制复制的字符个数,极有可能造成结束符被覆盖。
当然对于TCHAR没有直接的类似lstrcpy的函数,这时候就要判断一下是不是使用了UNICODE字符集
从而决定是使用strcpy_s还是wcscpy_s,判断使用
#ifdef UNICODE
    wcscpy_s(...)
#else
    strcpy_s(...)
#endif

顺便提一下,对于字符串处理函数都有安全版本,如
strcat_s对应strcat
strcpy_ s对应 strcpy等等,具体可以查看msdn
建议使用
 
3.字符串结束处理  

 if (NULL == pszTemp) 

{      

    delete[] pszTemp;     

    pszTemp = NULL; 

}
对于指针的普通处理在delete后指向空,这样可以避免下次的错误调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值