как правильно вывести TCHAR из функции?

Этот код:

#include <tchar.h>

TCHAR example_function() {
  TCHAR example_tchar[10];
  return example_tchar;
}

int main() { }

Выдает ошибку:

In function 'TCHAR example_function()':
error: invalid conversion from 'TCHAR* {aka char*}' to 'TCHAR {aka char}' [-fpermissive]
warning: address of local variable 'example_tchar' returned [enabled by default]

person rsk82    schedule 05.06.2012    source источник


Ответы (2)


Ваша переменная example_tchar - это не TCHAR, а массив.

Чего вы на самом деле пытаетесь достичь?

Если вы хотите вернуть один TCHAR:

TCHAR example_function() {
  TCHAR example_tchar[10];
  return example_tchar[0];
}
//or simply
TCHAR example_function() {
  TCHAR example_tchar = _T('');
  return example_tchar;
}

Если вы хотите вернуть массив или, скорее, указатель, вам придется динамически выделять память, чтобы предотвратить неопределенное поведение:

TCHAR* example_function() {
  TCHAR* example_tchar = new TCHAR[10];
  return example_tchar;
}
person Luchian Grigore    schedule 05.06.2012
comment
И не забудьте delete[] полученный указатель после использования! - person Forgottn; 05.06.2012
comment
разве он не возвращается по значению? - person silent; 05.06.2012
comment
@silent да, указатель возвращается по значению. Но он укажет на неверный адрес. - person Luchian Grigore; 05.06.2012

И если вы хотите вернуть строку из TCHARs, используйте что-то более сложное, например, std::basic_string<TCHAR> (или используйте указатели, или просто добавьте набор TCHAR[10] в качестве возвращаемого параметра). TCHAR — это просто определение, которое выбирает между char и wchar_t на основе параметров сборки.

person Forgottn    schedule 05.06.2012