elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema Incrementar puntero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema Incrementar puntero  (Leído 3,316 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Problema Incrementar puntero
« en: 16 Junio 2012, 11:39 am »

Buenas a todos vengo con este codigo curioso, estaba codeando y tenia problemas para acceder a los campos, mi logica me decia
una cosa XD, vean:


Código:
#include <Windows.h>
struct hola
{
DWORD a;
DWORD b;
DWORD* c;
};
hola jh;
int main()
{

jh.a = 10;
jh.b = 20;

DWORD* temp =  &jh.b;

temp = (DWORD*) temp + 4;

return 0;
}

pero por ejemplo si el puntero temp lo quiero incrementar +2 como seria? ojo no quiero incremntar 2 posiciones sino simplemente sumarle 2...
intente hacerle un casting de char* pero no funciono :|

alguien sabe?


ED: ( 5 min despues XD ) si funciono con el casting de unsigned char* haha, siempre en la madrugada me salen estos pequeños errores, quiza e sueño XD


« Última modificación: 16 Junio 2012, 11:44 am por RHL » En línea

The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: Problema Incrementar puntero
« Respuesta #1 en: 16 Junio 2012, 14:09 pm »

Hola,

Lo correcto sería:
Código
  1. Temp = (DWORD*)((int)Temp + 4);

Y digo lo correcto porque al menos así lo tengo entendido, lo que hace es convertir a entero para poder sumar como cualquier par de números y luego volver a hacer casting al tipo de puntero que es.
Con esto lo que harías sería incrementar la dirección del puntero pero si quieres incrementar su contenido deberás "desreferenciarlo".

Código
  1. *Temp = (*Temp) + 4;

Un saludo,
Iván Portilla.


« Última modificación: 16 Junio 2012, 17:57 pm por The Swash » En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Problema Incrementar puntero
« Respuesta #2 en: 16 Junio 2012, 17:01 pm »

hola por ahí este post te pueden ayudar

http://foro.elhacker.net/programacion_cc/tutorial_obtener_direccion_de_struct_dinamicamente-t358284.0.html

en cuanto el tipo de dato BYTE (unsigned char) es el que necesitás para incrementar de a un byte lógicamente, aunque el tipo puntero ya sabés que es de 4 bytes para el tipo que sea.
En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Problema Incrementar puntero
« Respuesta #3 en: 16 Junio 2012, 17:09 pm »

Podrías hacer:

Código
  1. *Temp = (*Temp) + 2;
  2.  

Saludos.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Problema Incrementar puntero
« Respuesta #4 en: 16 Junio 2012, 19:19 pm »

gracias a todos, los agradece
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Problema Incrementar puntero
« Respuesta #5 en: 16 Junio 2012, 20:32 pm »

gracias a todos, los agradece

si querías incrementar el valor de un número sería como ya dijeron anteriormente:

Código:
int main()
{
int num = 6;
DWORD* p = (DWORD*)&num;
*p = (*p)+2;
printf("%x\n", p);
printf("%d\n", *p);
system("pause");
return 0;
}

pero yo había entendido que querías incrementar el puntero en dos bytes, lo cual sería algo así (se muestran ambos casos según el tipo de puntero) :

Código:
int main()
{
unsigned long num = 16;
DWORD* p = (DWORD*)&num;
// p = p+2;//-----------------------> incrementa 2*4 bytes = 8 bytes
printf("%x\n", p);
printf("%x\n", p+2);
printf("%d\n", *p);

unsigned char* a = (unsigned char*)p;
// a = a+2;//-----------------------> incrementa 2*1 byte = 2 bytes
printf("%x\n", a);
printf("%x\n", a+2);
printf("%d\n", *a);

unsigned long x = (unsigned long)*a;
printf("%d\n", x);

system("pause");
return 0;
}

igualmente ya se que lo habías resuelto haciendo un cast al tipo BYTE, pero pongo esta explicación para otras personas que tengan dudas

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con variables puntero
Programación C/C++
oxi12pek 7 3,152 Último mensaje 5 Noviembre 2012, 17:26 pm
por BatchianoISpyxolo
Incrementar puntero entero con ++ en vez de +=
Programación C/C++
mester 3 4,465 Último mensaje 2 Enero 2016, 20:07 pm
por mester
Problema con puntero a una memoria reservada
Programación C/C++
fafafa01 3 2,129 Último mensaje 26 Junio 2016, 14:04 pm
por AlbertoBSD
Problema en C puntero a punteros.
Programación C/C++
Sicherer 7 4,775 Último mensaje 29 Septiembre 2017, 00:37 am
por AlbertoBSD
Problema con archivos: Reposicionamiento del puntero de registro activo.
Programación C/C++
FranAI 2 3,342 Último mensaje 23 Octubre 2020, 23:02 pm
por FranAI
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines