如何添加字符串

How to add strings?

本文关键字:字符串 添加 何添加      更新时间:2023-10-16

我真的很陌生C++,我正在制作一个简单的程序

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

但我需要向它添加一个字符*,因为它需要完整的路径。举个例子,它只是在做

我的DLL

.dll

但它需要做

C:/folder/anotherfolder/mydog/MyDLL

.dll

我试过做

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

但它崩溃了

问题是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?这将使您的生活更加轻松。

使用

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

这保留了缓冲区溢出(是的,Windows 在 PATH 中的限制为 255 个字符,因此您可以在大小在限制范围内之后断言)

您的char* DLLLOC中只有五个字符的空间。 (4 表示字母"NULL",在 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];

(如果dirconfig_DLLNAME是字符数组而不是指向字符的指针,则可以在此处使用sizeof

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

char DLLLOC[256];

为此,您必须确保最终字符串不会比数组的大小长。