【发布时间】:2019-06-21 13:39:09
【问题描述】:
我想用一个目录名连接一个随机字符串,最终结果必须是这样的:
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);
【问题讨论】:
-
str是char不是字符串或char数组。 -
您只为 s 分配了 1 个字符。
-
如何在单个
char中容纳十一个字符(十个随机字符加上终止符)? -
此外,
"%s"格式需要一个指向字符数组的第一个字符的指针,您传递单个char变量。 And 因为您使用的是wsprintf,所以字符串应该是宽字符字符串。总而言之,大量的undefined behavior 代码非常少。 -
Offtopic:在可用长度中不包含空终止符是很不寻常的,就像您所做的那样。更常见的是反过来,所以可以这样做:
char str[X]; gen_r(str, sizeof(str));- 照原样,需要这样做gen_r(str, sizeof(str) - 1)...
标签: c++ visual-studio-2013 char concatenation tchar