如何将char与TCHAR数组连接?

时间:2019-01-28 14:19:20

标签: c++ visual-studio-2013 char concatenation tchar

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

C:\ Program Files(x86)\ AAAFFF1334

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

enter image description here

该如何解决?

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);

1 个答案:

答案 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时。

look here

注意:在Microsoft文档中:

  • char* =始终为LPSTR
  • char* =始终为LPWSTR
  • wchar_t* = LPTSTR(如果定义了UNICODE:TCHAR*,否则:wchar_t*