es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Pregunta acerca de la asignación de char * [length]?

¿Cómo funciona este código?


#include <stdio.h> #include <string.h> int main() { #define NAME_LEN 10 char name[NAME_LEN+1]; strcpy(name, "Hi"); char (* name_ptr)[NAME_LEN +1] = & name; printf("%s=%s\n%s=%s\n", "name",name, "name_ptr",name_ptr ); }

Todo es rutinario hasta la línea 10. Para mí, la Línea 10 mezcla la declaración de una char * y char [length], así que esperaría tener una matriz de 10 char * (claramente, el compilador no está de acuerdo, porque esto funciona). Cuando compilo esto con -Wall, obtengo lo siguiente:

$ cc -g -Wall a.C
a.C: En la función 'int main ()':
a.C: 16: 2: advertencia: el formato '% s' espera un argumento de tipo 'char *', pero el argumento 5 tiene el tipo 'char (*) [11]' [-Wformat =]
);

¿Qué me estoy perdiendo?</string.h></stdio.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código declara un arreglo de caracteres llamado name con una longitud de NAME_LEN + 1, que en este caso es 11. Luego, usa la función strcpy() para copiar la cadena “Hi” en el arreglo name.

    En la línea 10, el código declara un puntero a un arreglo de caracteres con una longitud de NAME_LEN + 1. El operador & se utiliza para obtener la dirección de memoria del arreglo name y asignarla al puntero name_ptr.

    Finalmente, en la llamada a la función printf() en las líneas 12-14, se utiliza el especificador de formato %s para imprimir cadenas. Cuando se imprime el valor de name_ptr, se pasa como argumento. Como name_ptr es un puntero a un arreglo de caracteres y no un puntero a un carácter, el compilador emite una advertencia. Sin embargo, el código sigue funcionando correctamente y la salida muestra el contenido del arreglo name y su dirección.

Comments are closed.