我想用目录名称连接一个随机字符串,并且最终结果必须是这样的:
C:\ Program Files(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);
答案 0 :(得分:3)
gen_random
应该获得至少包含11个字符的char数组(大小为10个字符,终止为空则为1个字符)。
应该是:
char str[10+1]; //or char str[11];
gen_random(str, 10);
此外,格式字符串应为:"%s\\%hs"
,第一个为TCHAR*
类型(如果UNICODE定义为wchar_t*
,如果不是char*
,则第二个始终为{{ 1}}类型。
hs,hS
字符串。始终将此值解释为LPSTR类型,即使 当调用应用程序定义Unicode时。
char*
=始终为LPSTR
char*
=始终为LPWSTR
wchar_t*
= LPTSTR
(如果定义了UNICODE:TCHAR*
,否则:wchar_t*
)