Как объединить символ с массивом TCHAR? - PullRequest
0 голосов
/ 28 января 2019

Я хочу объединить случайную строку с именем каталога, и конечный результат должен выглядеть примерно так:

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 голосов
/ 28 января 2019

gen_random должен получить массив символов по крайней мере с 11 символами (10 для размера + 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.

смотрите здесь

Примечание: в документации Microsoft:

  • LPSTR = всегда char*
  • LPWSTR = всегда wchar_t*
  • LPTSTR = TCHAR* (если определен UNICODE: wchar_t*, иначе: char*)
...