LPCTSTR与StringCchCat串联

时间:2012-08-23 22:36:42

标签: c++ concatenation

嗯,我是c +的新手,所以我决定在一些项目之后做一些简单的事情,让我对c ++有一个基本的了解(不,你不知道你好的世界),我只想做一个%Appdata%上的文件夹,我发现我只需要这样做

void MakeFolder()
{
LPCTSTR appdata = getenv("APPDATA");
char *appchar = getenv("APPDATA");
size_t sizeApp = sizeof(appchar) + 8;
LPCTSTR folder = "/Folder";
StringCchCat(appdata, sizeApp, folder);
CreateDirectory (appdata,NULL);
}

但它说“StringCchCat:identifier not found”,我已经包含了STDDEF.h,错误代码没有改变!但我不确定代码本身是否会起作用......

2 个答案:

答案 0 :(得分:4)

StringCchCat<strsafe.h>中声明;你需要包含那个标题。

但是......因为你是C ++的新手,所以不要乱用C字符串。使用std::string

char const* const raw_appdata = getenv("APPDATA");
if (raw_appdata == nullptr)
{
    // Handle error
}

std::string const appdata = raw_appdata;
std::string const folder  = appdata + "\\Folder";

if (CreateDirectory(appdata.c_str(), nullptr) == FALSE)
{
    // Handle error
}

答案 1 :(得分:0)

通常,您需要包含Strsafe.h才能使用StringCchCat

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms647518(v=vs.85).aspx

使用StringCchCat的问题就是源缓冲区(appdata)可能不足以容纳appdaa和文件夹。通过将LPCSTR转换为std :: string并将字符串一起添加(参见How do I convert from LPCTSTR to std::string?),然后在需要const char *时调用string.c_str(),可以让自己的生活更轻松。