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

205
Vistas
¿Cuál es el punto de asignar el tamaño de una cadena?

Por ejemplo, si almaceno ABCDE desde la función scanf, la última función printf me da ABCDE como salida. Entonces, ¿cuál es el punto de asignar el tamaño de la cadena (Aquí 4).

 #include <stdio.h> int main() { int c[4]; printf("Enter your name:"); scanf("%s",c); printf("Your Name is:%s",c); return 0; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¡Comenzaré con, no use la matriz int para almacenar cadenas!

int c[4] asigna una matriz de 4 enteros. Un int suele ser de 4 bytes, por lo que normalmente sería de 16 bytes (pero podría ser de 8 o 32 o algo más en algunas plataformas).

Luego, usa esta asignación primero para leer caracteres con scanf . Si ingresa ABCDE , usa 6 caracteres (hay un 0 byte adicional al final de la cadena que marca el final, que también necesita espacio), que encaja en la memoria reservada para una matriz de 4 enteros. Ahora podría tener mucha mala suerte y tener una plataforma en la que int tiene la llamada "representación trampa", lo que haría que su programa fallara. Pero, si no está escribiendo el código para algún dispositivo muy exótico, no lo habrá. Ahora sucede que este código va a funcionar, por la misma razón que va a funcionar memcpy : el tipo char es especial en C y permite copiar bytes hacia y desde diferentes tipos.

El mismo tratamiento especial ocurre cuando imprime la matriz int[4] con printf usando el formato %s . Funciona, porque el char es especial.

Esto también demuestra cuán inseguros son scanf e printf . Con gusto aceptan c que les das y asumen que es una matriz de caracteres con tamaño y datos válidos.

Pero, no hagas esto. Si desea almacenar una cadena, char la matriz de caracteres. El código correcto para esto sería:

 #include <stdio.h> int main() { char c[16]; // fits 15 characters plus terminating 0 printf("Enter your name:"); int items = scanf("%15s",c); // note: added maximum characters // scanf returns number of items read successfully, *always* check that! if (items != 1) { return 1; // exit with error, maybe add printing error message } printf("Your Name is: %s\n",c); // note added newline, just as an example return 0; }
over 4 years ago · Santiago Trujillo Denunciar

0

El tamaño de una matriz debe definirse al declarar una variable de cadena C porque se usa para calcular cuántos caracteres se almacenarán dentro de la variable de cadena y, por lo tanto, cuánta memoria se reservará para su cadena. Si excede esa cantidad, el resultado es un comportamiento indefinido.

over 4 years ago · Santiago Trujillo Denunciar

0

Has usado int c , no char c . En C, un char tiene solo 1 byte de longitud, mientras que un int tiene 4 bytes. Es por eso que no enfrentaste ningún problema.

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