如何添加字符串?

时间:2015-04-25 02:09:43

标签: c++ char

我是C ++的新手,我正在制作一个简单的程序

TCHAR CONFIG_NAME[32];
TCHAR CONFIG_PROCESSNAME[32];
int a = GetPrivateProfileString("Injection", "Name", "", CONFIG_DLLNAME, 32, path);

但是我需要为它添加一个char *,因为它需要完整的路径。 例如,它只是

MYDLL.DLL

但它需要做

C:/folder/anotherfolder/mydog/MyDLL.dll

我试过

char* DLLLOC = "NULL";
sprintf(DLLLOC, "%s%s", dir, CONFIG_DLLNAME);

但它崩溃了

3 个答案:

答案 0 :(得分:2)

问题是DLLLOC没有足够的空间来容纳你的字符串连接。

解决方案是预先分配一个大的char缓冲区并使用它,如下所示。

#define CONFIG_DLLNAME  "configdllname"

int main()
{
    char str[1024];
    const char* dir = "dir";
    sprintf(str, "%s%s", dir, CONFIG_DLLNAME);
    printf(str);
}

如果字符串超过1024个字符,您将遇到同样的问题;欢迎来到C语言中的字符串操作。:)

此外,由于您标记这是一个C ++问题,您是否有理由不使用std::string?这会让你的生活更轻松。

答案 1 :(得分:1)

使用

wstring DLLLOC(dir);
DLLLOC.append(CONFIG_DLLNAME);

这保留了缓冲区溢出(并且是Windows在路径中限制为255个字符,因此您可以在大小限制之后断言)

答案 2 :(得分:0)

您的char* DLLLOC只有五个字符的空间。 (4表示字母“NULL”,另外一个表示空终止符(一个零字节,用于标记c ++中字符串的结尾。您需要确保char* DLLLOC指向一个足够大的区域,以包含您放置的字符串进入它。

您可以尝试动态分配空间:

// c style
char* DLLLOC = malloc(strlen(dir)+strlen(CONFIG_DLLNAME)+1);
// c++ style
char* DLLLOC = new char[strlen(dir)+strlen(CONFIG_DLLNAME)+1];

(如果sizeofdir是字符数组而不是指向字符的指针,则可以在此使用config_DLLNAME。)

或者,您可以事先声明空间:

char DLLLOC[256];

要使其正常工作,您必须确保最终字符串不会超过数组的大小。