Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: mester en 16 Noviembre 2015, 21:14 PM

Título: Convertir de void a int
Publicado por: mester en 16 Noviembre 2015, 21:14 PM
Hola.
Estoy probando eso de los threads en Linux con la programación en C para hacer un servidor de mensajes multicliente. El problema con el que me topo es:
1. La función para pasar el thread solo me permite pasar el argumento como void *.
2. La función no me permite pasar más de un argumento.
¿Me podríais ayudar?
He estado probando con la conversión clasica tal que así:

#include<stdint.h>
...
void funcion(void *numero){
      int a=(intptr_t)numero;
...

Al imprimirlo dentro de 'función' me devulve un valor aleatorio.
Gracias de antemano.
Título: Re: Convertir de void a int
Publicado por: MAFUS en 16 Noviembre 2015, 21:28 PM
Tal vez te falta dereferenciar el puntero:
int a = *(int*)numero;
Título: Re: Convertir de void a int
Publicado por: Stakewinner00 en 16 Noviembre 2015, 21:35 PM
numero es un puntero, y tu quieres coger el contenido al que apunta numero, no el contenido de numero (la dirección), entonces debes cambiar esa línea por algo tipo int a = *(intptr_t*)numero;  si luego lo imprimes por ejemplo usando printf veras que es el valor correcto, por ejemplo el sigiente código imprimirá 123

#include <stdio.h>
#include <stdint.h>

void funcion(void *numero) {
 int a = *(intptr_t*)numero;
 printf("%d", a);
}

int main() {
 int n = 123;
 funcion((void*)&n);

}


Como decia MAFUs, vamos...
Título: Re: Convertir de void a int
Publicado por: mester en 22 Noviembre 2015, 20:07 PM
Cita de: Stakewinner00 en 16 Noviembre 2015, 21:35 PM
numero es un puntero, y tu quieres coger el contenido al que apunta numero, no el contenido de numero (la dirección), entonces debes cambiar esa línea por algo tipo int a = *(intptr_t*)numero;  si luego lo imprimes por ejemplo usando printf veras que es el valor correcto, por ejemplo el sigiente código imprimirá 123

#include <stdio.h>
#include <stdint.h>

void funcion(void *numero) {
 int a = *(intptr_t*)numero;
 printf("%d", a);
}

int main() {
 int n = 123;
 funcion((void*)&n);

}


Como decia MAFUs, vamos...
Vale, solucionado, gracias