Remover primeros caracteres de una variable TCHAR

Iniciado por el_doctor, 8 Diciembre 2014, 22:39 PM

0 Miembros y 1 Visitante están viendo este tema.

el_doctor

Hola no se si ya está este tema; bueno todavía me resulta difícil trabajar con este tipo de variable, cómo podría remover los primeros 4 caracteres de un tipo TCHAR.

x64core

Cita de: el_doctor en  8 Diciembre 2014, 22:39 PM
Hola no se si ya está este tema; bueno todavía me resulta difícil trabajar con este tipo de variable, cómo podría remover los primeros 4 caracteres de un tipo TCHAR.
TCHAR no puede ser de 4 bytes, como maximo de 2 (unicode).

TCHAR MSDN:
http://msdn.microsoft.com/en-us/library/office/cc842072%28v=office.15%29.aspx

avesudra

#2
Cita de: x64Core en  8 Diciembre 2014, 23:25 PM
TCHAR no puede ser de 4 bytes, como maximo de 2 (unicode).

TCHAR MSDN:
http://msdn.microsoft.com/en-us/library/office/cc842072%28v=office.15%29.aspx

No entiendo x64Core, ¿dónde dice el_doctor que sea de cuatro bytes? , creo que leiste mal , pone 4 caracteres, o yo ando muy perdido en esto :(


Cita de: el_doctor en  8 Diciembre 2014, 22:39 PM
Hola no se si ya está este tema; bueno todavía me resulta difícil trabajar con este tipo de variable, cómo podría remover los primeros 4 caracteres de un tipo TCHAR.

El tipo TCHAR es solo un typedef de char en las plataformas  ANSI y DBCS, así que trabaja como ese tipo. Para quitar N caracteres simplemente copia los que quedarían si los eliminases en las primeras posiciones, es decir:

HOLA
LA
LALA
LA'\0'A

Es decir debes copiar en la primera posición el caracter que está N posiciones más delante mientras no supere el tamaño de la cadena, si no te dará un error de violación de acceso a la memoria. Una vez hecho eso debes terminar la cadena nueva en un caracter nulo, para ello al eliminar N caracteres, el caracter nulo estará ahora en el largo de la original menos los N caracteres eliminados, un ejemplo para dos caracteres sería (te toca a ti ponerlo como TCHAR):

char cadena [] = "hola que tal";
 
// Desde i = 0 hasfta que 2 + i no sea el largo de la cadena.
 
for(int i = 0; 2 + i < strlen(cadena); ++i)
{
 // Va copiando en la posicion i , lo que hay dos posiciones mas adelante
 // pues queremos eliminar dos caracteres.
 cadena[i] = cadena[2+i];
}
 
// Al eliminar dos caracteres, el fin de cadena debe quedar en el largo de la
// cadena menos los dos caracteres que hemos eliminado.
cadena[12-2] = '\0';
Regístrate en

x64core

#3
Cita de: avesudra en  8 Diciembre 2014, 23:41 PM
No entiendo x64Core, ¿dónde dice el_doctor que sea de cuatro bytes? , creo que leiste mal , pone 4 caracteres, o yo ando muy perdido en esto :(
En el enlace que deje dice que TCHAR puede ser un ANSI o UNICODE. eso facilita cuando uno quiere compilar, no hay necesidad de cambiar todas las cadenas de la aplicación a unicode o viceversa.

Ahora acerca de la pregunta principal, el usuario dijo que tiene una variable de tipo TCHAR no un array asi que si el se referia a una cadena
entonces la pregunta está mal formulada.

-

Acerca de los bytes eso depende de la plataforma cierto, solamente tome en cuenta lo más comun.




Cita de: avesudra en  8 Diciembre 2014, 23:54 PM
Ahhh ya te entendí, cierto, pero no sé se intuye que si dice de 4 caracteres será un array ¿no?

Un saludo.
Sí, lo más probable.

el_doctor

hola, gracias por la explicación y si la pregunta no la detalle lo suficiente mis disculpas; pero la intuición de avesudra era correcta, estoy modificando el valor de salida de la función GetModuleFileNameEx y es un tipo TCHAR; gracias por su explicación...

Eternal Idol

En realidad GetModuleFileNameEx no existe mas que como una macro que resuelve a GetModuleFileNameExA y GetModuleFileNameExW dependiendo de si el proyecto esta configurado para ANSI o Unicode.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón