2012-08-01 146 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
要附加的字符数。

相关问题