Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
C char* problema de impresión

Estoy enfrentando un comportamiento extraño con una variable char*

 user_message* parseMessage(char *incoming_msg, uint64_t size) { user_message* msg = calloc(1, sizeof(user_message)); printf("value: %s\n", incoming_msg); return msg; } void start_server() { char* msg = "1|david|pwd|"; printf("msg: %s\n", msg); parseMessage(&msg, 12); }

La salida :

 msg: 1|david|pwd| value: �[

Lucho por descubrir qué está mal en mi código.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

parseMessage(&msg, 12); debe ser parseMessage(msg, 12);

El &msg significa que está pasando un puntero a msg, que será un char ** cuando la función solo toma un char *

over 4 years ago · Santiago Trujillo Denunciar

0

El primer parámetro de la función parseMessage y la expresión utilizada como argumento para este parámetro tienen tipos diferentes.

El parámetro se declara con el tipo char *

 user_message* parseMessage(char *incoming_msg, uint64_t size)

mientras que la expresión utilizada como argumento tiene el tipo char ** .

 char* msg = "1|david|pwd|"; //... parseMessage(&msg, 12);

Entonces, de hecho, en lugar de generar la cadena a la que apunta el puntero msg , está tratando de generar como una cadena lo que está almacenado en la memoria ocupada por la variable msg y lo que le sigue

Necesitas llamar a la función al menos como

 parseMessage( msg, 12 );

También sería mejor al menos declarar el primer parámetro de función con el calificador const si la cadena pasada no se cambia dentro de la función.

 user_message* parseMessage( const char *incoming_msg, uint64_t size);
over 4 years ago · Santiago Trujillo Denunciar

0

&msg produce un char ** o un puntero a puntero a char .

Tanto su función parseMessage como el especificador printf %s esperan un char * .

No necesita la dirección del operador aquí

 parseMessage(msg, 12);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda