Заполнение массива TCHAR через цикл for - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь выполнить l oop через массив TCHAR и для каждой итерации l oop преобразовать номер итерации в строку и сохранить его в массиве.

Ниже приведен код:

#undef  UNICODE
#define UNICODE
#undef  _UNICODE
#define _UNICODE

#include <tchar.h>
#include <string>
#include <windows.h>
#include <strsafe.h>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>

LRESULT CALLBACK MyTextWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 //do stuff...

#define LINES 56
static TCHAR *abc[LINES];

for(unsigned int l = 0; l<(LINES-1); l ++){
   std::wstring s = std::to_wstring(l);
   abc[l]=TEXT(s.c_str());
}

Но в CodeBlocks выдается следующая ошибка:

ошибка: 'Ls' не был объявлен в этой области

Я попытался прочитать о TCHAR и макросе TEXT. В соответствии с здесь https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-text макрос TEXT ожидает указатель на строку, поэтому я попытался использовать .c_str ()

1 Ответ

1 голос
/ 09 февраля 2020

Макрос TEXT (или _T) используется для символьных строк ("string"), а не переменных. Он будет ставить перед аргументом L перед аргументом при компиляции с UNICODE (или это _UNICODE? Я никогда не помню), поэтому строка станет L"string".

Класс wstring вернет указатель wchar_t *, который можно присвоить вашему значению TCHAR *. Однако ваш wstring объект является локальным и уничтожается в конце итерации l oop. Вам нужно будет либо динамически распределить пространство для значений TCHAR *, либо выделить массив объектов wstring для хранения созданных строк, которые будут слипаться, пока вы не закончите, используя abc.

...