Convertir de void a int

Iniciado por mester, 16 Noviembre 2015, 21:14 PM

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

mester

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.
Justicia es dar a cada uno lo que se merece

MAFUS

Tal vez te falta dereferenciar el puntero:
int a = *(int*)numero;

Stakewinner00

#2
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...

mester

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
Justicia es dar a cada uno lo que se merece