Foro de elhacker.net

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
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
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 :(


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):

Código
  1. char cadena [] = "hola que tal";
  2.  
  3. // Desde i = 0 hasfta que 2 + i no sea el largo de la cadena.
  4.  
  5. for(int i = 0; 2 + i < strlen(cadena); ++i)
  6. {
  7.  // Va copiando en la posicion i , lo que hay dos posiciones mas adelante
  8.  // pues queremos eliminar dos caracteres.
  9.  cadena[i] = cadena[2+i];
  10. }
  11.  
  12. // Al eliminar dos caracteres, el fin de cadena debe quedar en el largo de la
  13. // cadena menos los dos caracteres que hemos eliminado.
  14. cadena[12-2] = '\0';


Título: Re: Remover primeros caracteres de una variable TCHAR
Publicado por: x64core en 8 Diciembre 2014, 23:51 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.



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.