0

この例の出力は...

HC:\Projects\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;
    }
4

4 に答える 4

3

string呼び出しの前にnull終了文字がなく、宛先文字列がnull終了する必要がありますwcscat()wcscat()

strDestination
    ヌルで終了する宛先文字列。

への変更:

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

また:

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

また:

TCHAR string[255];
string[0]=TEXT('H');
string[0]=TEXT('\0');
于 2012-08-01T13:55:42.810 に答える
2

「文字列」「H」をヌルバイトで終わらせていないためです。したがってwcscat、(初期化されていない)配列の最初のヌルバイトが見つかった場所に追加されます。これには、たまたま実行可能パスが含まれていました(およびその前の何かの1バイト)。

于 2012-08-01T13:54:38.157 に答える
1

文字列配列は。で終了する必要があります'\0'。のようなコードを更新します。

string[0]=TEXT('H');
string[1]=TEXT('\0');
于 2012-08-01T13:56:28.250 に答える
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() は 2 つの Null で終わる文字列 "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
Null で終わる宛先文字列。
strSource
Null で終わるソース文字列。
count
追加する文字数。

于 2012-08-01T14:19:34.143 に答える