全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2202
推到 Plurk!
推到 Facebook!

關於strcat複製後產生部分亂碼

缺席
smokyonion
一般會員


發表:2
回覆:1
積分:0
註冊:2009-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-28 14:55:43 IP:123.204.xxx.xxx 訂閱
各位版上的先進好:
我使用strcat在做兩個LPCTSTR變數合併之後產生的結果
於該結果( lpSub3)前端都換產生一些亂碼,請問該如何能排除這樣的結果?
我的程式碼如下,開發工具: DevCPP
[code cpp]
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
LPCTSTR lpSub1 =
TEXT("SYSTEM\\CurrentControlSet\\Enum\\");
LPCTSTR lpSub2 =
TEXT("USB\\VID_067B&PID_2303\\5&2c5c6891&0&2");
char *pNewFile = (char*)malloc(100);
//sprintf(pNewFile, "%s%s", buf, "\\myfile");
strcat(pNewFile, lpSub1);
//cout << pNewFile;
strcat(pNewFile, lpSub2);
cout << pNewFile << endl;
LPCTSTR lpSub3 = pNewFile;
cout << lpSub3 << endl;

system("pause");
return 0;
}

[/code]
smokyonion
一般會員


發表:2
回覆:1
積分:0
註冊:2009-07-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-28 15:58:21 IP:123.204.xxx.xxx 訂閱
在下後來自行找到了解決辦法,修正後原始碼如下
pNewFile[0] = '\0';是因為strcat() 會把上一個字串最後的'\0'取代掉
[code cpp]
int main()
{
LPCTSTR lpSub1 =
TEXT("SYSTEM\\CurrentControlSet\\Enum\\");
LPCTSTR lpSub2 =
TEXT("USB\\VID_067B&PID_2303\\5&2c5c6891&0&2");
char *pNewFile = (char*)malloc(100);

pNewFile[0] = '\0';
//
pNewFile[0] = '\0';是因為strcat() 會把上一個字串最後的'\0'取代掉

//sprintf(pNewFile, "%s%s", buf, "\\myfile");
strcat(pNewFile, lpSub1);
//cout << pNewFile;
strcat(pNewFile, lpSub2);
cout << pNewFile << endl;
LPCTSTR lpSub3 = pNewFile;
cout << lpSub3 << endl;

system("pause");
return 0;
}

[/code]
編輯記錄
smokyonion 重新編輯於 2009-07-28 16:00:12, 註解 無‧
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-11-17 11:53:27 IP:122.146.xxx.xxx 訂閱
或者養成習慣,只要 new 或 malloc 後,塞入 '\0'
依你的 code 一定要做此動作,不然也可能 garbage code 是在前面
[code cpp]
memset(pNewFile,'\0',sizeof(100));
[/code]

系統時間:2024-11-22 11:51:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!