Foro de elhacker.net

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í:
Código
  1. #include<stdint.h>
  2. ...
  3. void funcion(void *numero){
  4.      int a=(intptr_t)numero;
  5. ...
  6.  
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
Código:
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

Código
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. void funcion(void *numero) {
  5.  int a = *(intptr_t*)numero;
  6.  printf("%d", a);
  7. }
  8.  
  9. int main() {
  10.  int n = 123;
  11.  funcion((void*)&n);
  12.  
  13. }
  14.  

Como decia MAFUs, vamos...


Título: Re: Convertir de void a int
Publicado por: mester en 22 Noviembre 2015, 20:07 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
Código:
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

Código
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. void funcion(void *numero) {
  5.  int a = *(intptr_t*)numero;
  6.  printf("%d", a);
  7. }
  8.  
  9. int main() {
  10.  int n = 123;
  11.  funcion((void*)&n);
  12.  
  13. }
  14.  

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