我想用目录名连接一个随机字符串,最终结果必须是这样的:
C:\ Program档案(x86)\ AAAFFF1334
在以下代码的这一部分:“ AAAFFF1334”带有奇怪的字符,请参见:
必须采取什么措施来解决此问题?
TCHAR mydir[MAX_PATH];
void gen_random(char *s, const int len) {
static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < len; ++i) {
s[i] = alphanum[rand() % (sizeof(alphanum)-1)];
}
s[len] = 0;
}
// main
TCHAR szProgramFiles[MAX_PATH];
HRESULT hProgramFiles = SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, szProgramFiles);
char str;
gen_random(&str, 10);
wsprintf(mydir, TEXT("%s\\%s"), szProgramFiles, str);
最佳答案
gen_random
应该获得至少包含11个字符的char数组(大小为10个字符,终止为null的则为1个字符)。
因此应该是:
char str[10+1]; //or char str[11];
gen_random(str, 10);
另外,格式字符串应为:
"%s\\%hs"
,第一个为TCHAR*
类型(如果UNICODE定义为wchar_t*
,如果不是char*
),第二个始终为char*
类型。hs,hS
串。始终将此值解释为LPSTR类型,即使
当调用应用程序定义Unicode时。
look here
注意:在Microsoft文档中:
LPSTR
=始终char*
LPWSTR
=始终wchar_t*
LPTSTR
= TCHAR*
(如果定义了UNICODE:wchar_t*
,否则:char*
)关于c++ - 如何将char与TCHAR数组连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54403910/