我是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);
但它崩溃了
答案 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];
(如果sizeof
和dir
是字符数组而不是指向字符的指针,则可以在此使用config_DLLNAME
。)
或者,您可以事先声明空间:
char DLLLOC[256];
要使其正常工作,您必须确保最终字符串不会超过数组的大小。