una tablas tabla matrices llenar como c++ tchar

tablas - matrices en c++



Cómo asignar un valor a una matriz TCHAR (2)

Tengo una matriz TCHAR en mi código C ++ que quiero asignarle cadenas estáticas.

Le puse una cadena inicial a través de

TCHAR myVariable[260] = TEXT("initial value");

Todo funciona bien en esto. Sin embargo, cuando lo divido en dos líneas como en

TCHAR myVariable[260]; myVariable = TEXT("initial value");

falla y da un error de compilación:

error C2440: ''='': no ​​se puede convertir de ''const char [14]'' a ''TCHAR [260]''

¿No debería la función TEXT() hacer exactamente lo que quiero aquí? convertir la cadena dada a TCHAR s? ¿Por qué funciona, al juntar las dos líneas? ¿Qué tengo que cambiar para que funcione?

Alguna otra cosa confusa que he encontrado:

He buscado en Internet para encontrarlo y he visto que también hay _T() y _TEXT() y __T() y __TEXT() . ¿Para qué son? ¿Cuál de ellos debería usar en qué entorno?


Vea la respuesta de avakar para la respuesta directa. Iba a agregar esto como un comentario, pero realmente es una recomendación independiente. Le advertiré que esto suena como una perorata, pero sí viene del uso de TCHAR y luego problemas de funcionamiento durante algunos años antes de intentar eliminarlo de una base de códigos bastante grande.

Asegúrate de que realmente entiendes el efecto del uso de matrices TCHAR y sus amigos. Son engañosamente difíciles de usar correctamente. Aquí hay una breve lista de cosas que debes tener en cuenta:

  • sizeof(TCHAR) es condicional : examine el código que lo contiene. Si está haciendo algo más que calcular el tamaño que se está pasando a malloc() o memcpy() entonces es probable que esté mal.
  • TCHAR es un alias de tipo : dado que TCHAR no es más que un typedef , es realmente fácil escribir cosas como wcscpy(tszStr, wszAry) y no ser más sabio. Básicamente, TCHAR es char o wchar_t por lo que las selecciones de sobrecarga pueden sorprenderlo.
  • wsprintf() y swprintf() son diferentes : este es un caso especial del anterior, pero tiene una consideración especial ya que es muy fácil cometer un error aquí.

Si desea utilizar TCHAR , asegúrese de compilar las versiones de UNICODE y MBCS con regularidad. Si no lo hace, entonces probablemente deshará cualquier ventaja que esté tratando de obtener al utilizarlos en primer lugar.

Aquí hay dos recomendaciones que tengo sobre cómo no usar TCHAR en primer lugar cuando está escribiendo código C ++.

  1. Use CString si está usando MFC o si se siente cómodo atándose a MSFT.
  2. Use std::string o std::wstring junto con la API específica del tipo; use CreateFileA() y CreateFileW() cuando sea apropiado.

Personalmente, elijo este último, pero los problemas de codificación de caracteres y transcodificación de cadenas son solo una pesadilla de vez en cuando.


La razón por la que la asignación no funciona tiene muy poco que ver con TCHAR s y _T . Lo siguiente tampoco funcionará.

char var[260]; var = "str"; // fails

La razón es que en C y C ++ no se pueden asignar matrices directamente. En su lugar, debe copiar los elementos uno por uno (utilizando, por ejemplo, strcpy , o en su caso _tcscpy ).

strcpy(var, "str");

Con respecto a la segunda parte de su pregunta, TEXT , _T y las otras son macros, que en las compilaciones Unicode convierten un literal de cadena en un literal de cadena ancha. En construcciones no Unicode no hacen nada.