1
class Vars{
    public:
    char *appData = getenv("AppData");
    string datadir = strcat(appData, "\\Bob");
};


cout << v.datadir; 

出力"C:\Users\Adam\AppData\Roaming\Bob\Bob"

それ以外の "C:\Users\Adam\AppData\Roaming\Bob"

常に 2 番目のパラメーターを 2 回追加します。どうして?

4

2 に答える 2

2

「この関数によって返されるポインターが指す文字列は、プログラムによって変更されません。」(strcat によって) 行ったように値を変更すると、予期しない動作が発生します。解決策は、不変の指定された文字列を a に単純にコピーし、stringそこで連結を行うことです。

これを行う新しいパブリック関数を作成するのはどうですか:

string datadir(getenv("AppData"));
datadir += "\\Bob";

これは C++11 より前のコードです。

于 2013-05-30T12:47:01.490 に答える