2012-08-01 75 views
0

這個例子的輸出後轉化成CString ...追加分配的第一個索引

HC:\項目\ cppexample.exeello世界。

爲什麼當前可執行文件的路徑被壓入字符串?

#ifndef UNICODE 
#define UNICODE 
#endif 


    #include <Windows.h> 

    int main() 
    { 
     TCHAR string[255]; 
     string[0]=TEXT('H'); 
     wcscat(string,TEXT("ello world")); 

     MessageBox(0,string,0,0); 

     system("Pause"); 
     return 0; 
    } 

回答

2

因爲您沒有用空字節結束「字符串」「H」。因此wcscat追加到它找到您的(未初始化)數組中的第一個空字節的位置,該數組恰好包含可執行文件路徑(以及之前的其他一個字節)。

3

string有沒有空調用wcscat()wcscat()之前終止字符需要目標字符串爲空終止:

 
strDestination 
    Null-terminated destination string. 

更改爲:

TCHAR string[255] = TEXT(""); 
string[0]=TEXT('H'); 

或:

TCHAR string[255] = TEXT("H"); 

或者:

TCHAR string[255]; 
string[0]=TEXT('H'); 
string[0]=TEXT('\0'); 
1

您需要用'\0'終止字符串數組。更新代碼。

string[0]=TEXT('H'); 
string[1]=TEXT('\0'); 
1

您的問題:

string[0]=TEXT('H'); 
wcscat(string,TEXT("ello world")); 

和 初始化TCHAR string[255];

這應該解決您的問題:

wmemset(string,TEXT('\0'), 255); 
string[0]=TEXT('H'); 
string[1]=TEXT('\0'); 
wcscat(string,TEXT("ello world")); 

所以,現在wcscat()會很樂意連接兩個空值終止字符串,「H」和「ello,World」。而不是拋出一些垃圾值。

避免使用,緩衝區安全: wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );

而是使用: wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );

其中,

strDest
空值終止目標字符串。
strSource
以空字符結尾的源字符串。
count
要附加的字符數。