日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

_tcscpy_s函数引发的问题

發(fā)布時(shí)間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 _tcscpy_s函数引发的问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)上下載的VS2017 VC++工程,發(fā)現(xiàn)一段代碼老是報(bào)堆破壞的的錯(cuò)誤,當(dāng)時(shí)沒(méi)去理會(huì),自己寫(xiě)了一段代碼重新實(shí)現(xiàn)了需要的功能:

?? ??? ??? ??? ?if(dwDevName != NULL)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?/*
?? ??? ??? ??? ??? ?if(*sValue)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?TCHAR *szTemp = new TCHAR[sizeof(DWORD)];
?? ??? ??? ??? ??? ??? ?_tcscpy_s(szTemp, sizeof(DWORD)*sizeof(TCHAR), sValue+3);
?? ??? ??? ??? ??? ??? ?dwDevName[idx] = (DWORD)_ttoi(szTemp);
?? ??? ??? ??? ??? ??? ?delete [] szTemp;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?*/?? ?

?? ??? ??? ??? ??? ?if (*sValue)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?int k;
?? ??? ??? ??? ??? ??? ?int comNum = 0;
?? ??? ??? ??? ??? ??? ?for (k = 0; k < 3; k++)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?if (sValue[3 + k] == '\0')
?? ??? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?comNum = comNum*10+(sValue[3 + k]-0x30);
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?dwDevName[idx] = (DWORD)comNum;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}

后來(lái)經(jīng)過(guò)仔細(xì)分析和調(diào)試,發(fā)現(xiàn)問(wèn)題出在_tcscpy_s函數(shù),通過(guò)修改動(dòng)態(tài)內(nèi)存大小:TCHAR *szTemp = new TCHAR[128];

錯(cuò)誤暫時(shí)消失。由此推測(cè)是內(nèi)存的非法訪問(wèn)造成的。查看MSDN,發(fā)現(xiàn)是對(duì)函數(shù)的第二個(gè)參數(shù)的理解出錯(cuò)了,把那個(gè)長(zhǎng)度當(dāng)成內(nèi)存字節(jié)數(shù)了,應(yīng)該是字符數(shù)才對(duì)。

正確方式:由 _tcscpy_s(szTemp, sizeof(DWORD)*sizeof(TCHAR), sValue+3);

改為:?_tcscpy_s(szTemp, sizeof(DWORD), sValue+3);

?

?

errno_t strcpy_s( char *dest, rsize_t dest_size, const char *src );

參數(shù)

dest
目標(biāo)字符串緩沖區(qū)的位置。

dest_size
在目標(biāo)字符串緩沖區(qū)的大小char單位窄和多字節(jié)函數(shù),并wchar_t寬函數(shù)的單位。 此值必須大于零且不大于RSIZE_MAX

src
以 null 結(jié)尾的源字符串緩沖區(qū)。

返回值

如果成功,則為零;否則返回錯(cuò)誤。

?

?

?

總結(jié)

以上是生活随笔為你收集整理的_tcscpy_s函数引发的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。