Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: el_doctor en 8 Diciembre 2014, 22:39 PM

Título: Remover primeros caracteres de una variable TCHAR
Publicado por: 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.
Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: x64core en 8 Diciembre 2014, 23:25 PM
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
Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: avesudra en 8 Diciembre 2014, 23:41 PM
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';
Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: x64core en 8 Diciembre 2014, 23:51 PM
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.
Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: el_doctor en 9 Diciembre 2014, 16:37 PM
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...
Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: Eternal Idol en 9 Diciembre 2014, 16:43 PM
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.