我想用目录名连接一个随机字符串,最终结果必须是这样的:

C:\ Program档案(x86)\ AAAFFF1334

在以下代码的这一部分:“ AAAFFF1334”带有奇怪的字符,请参见:

c++ - 如何将char与TCHAR数组连接?-LMLPHP

必须采取什么措施来解决此问题?

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/

10-12 15:55