C
Tutorial C: Arrays y manejo de cadenas
C aprende a declarar y usar arrays unidimensionales de forma óptima en tus programas. Optimiza el manejo de datos con esta lección.
Aprende C y certifícateDeclaración y uso de arreglos unidimensionales
Un array unidimensional en C es una secuencia de elementos del mismo tipo, almacenados de manera contigua en memoria y accesibles mediante un índice basado en cero. Dado que cada elemento se guarda de forma adyacente, conocer la posición exacta permite un acceso rápido a cada valor.
Para la declaración de un array, se indica el tipo de dato y el número de elementos entre corchetes. Por ejemplo:
int numeros[5];
Este ejemplo reserva espacio para 5 enteros consecutivos en memoria. Cada posición se referirá como numeros[0]
, numeros[1]
y así sucesivamente.
En la inicialización de un array, se puede asignar una lista de valores entre llaves. Así, en el momento de la declaración podemos hacer:
int valores[3] = {10, 20, 30};
Este ejemplo ubica los valores 10, 20 y 30 en las posiciones valores[0]
, valores[1]
y valores[2]
. Si se omite parte de la lista, C completa el resto con ceros.
También es posible dejar vacío el número de elementos al definir un array para que se ajuste automáticamente al número de inicializadores:
float decimales[] = {1.5f, 2.5f, 3.5f};
De esta manera, se dimensiona el array para almacenar exactamente tres valores. Aun así, conviene indicar explícitamente el tamaño cuando se busca mayor claridad.
Acceder o modificar elementos se realiza mediante un índice que indica la posición. En un bucle, se puede recorrer fácilmente el array:
for (int i = 0; i < 3; i++) {
printf("Elemento %d: %.2f\n", i, decimales[i]);
}
Es fundamental respetar el rango de índices para evitar desbordamientos que puedan provocar comportamientos indeterminados. Por lo general, verificar condiciones de límite o usar constantes simbólicas minimiza este tipo de errores.
En situación de lectura desde teclado, se puede emplear un bucle para almacenar datos:
#include <stdio.h>
int main(void) {
int calificaciones[5];
for(int i = 0; i < 5; i++) {
scanf("%d", &calificaciones[i]);
}
return 0;
}
Así, cada elemento puede gestionarse individualmente sin necesidad de variables independientes. Este enfoque permite procesar grandes cantidades de datos de forma sistemática.
Arrays multidimensionales
Un array multidimensional en C se concibe como un conjunto de arreglos anidados, todos del mismo tipo, organizados en memoria de forma contigua en row-major. Esta organización implica que los elementos de la primera dimensión se alinean secuencialmente, seguidos de los de la segunda, y así sucesivamente.
Para declarar un array bidimensional que represente, por ejemplo, datos en filas y columnas, puede usarse:
int matriz[3][4];
Aquí se reservan 3 filas y 4 columnas de tipo int, almacenadas de forma lineal según la convención de C. Cada elemento se identifica por su posición, como matriz[fila][columna]
.
La inicialización se puede realizar con llaves anidadas. Por ejemplo:
int tabla[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Cada bloque entre llaves se asocia a una fila, mientras que los valores individuales ocupan posiciones consecutivas siguiendo el orden establecido. Si se omite parte de la lista de inicializadores, el compilador completa los huecos con ceros.
Cuando se accede a un array multidimensional, se suelen emplear bucles anidados para recorrer cada nivel de la estructura. Por ejemplo:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", tabla[i][j]);
}
printf("\n");
}
Cada índice indica la dimensión que se desea acceder, reduciendo la necesidad de múltiples variables independientes y facilitando la gestión de datos tabulares.
Los arrays pueden tener más de dos dimensiones, aunque en la práctica los más comunes suelen ser los bidimensionales. Para reservar espacio en un array tridimensional, se indicaría el tamaño en cada dimensión, por ejemplo:
float cubo[2][3][4];
De esta manera, se gestionan múltiples niveles de información, anidando los conjuntos según la necesidad de la aplicación. Con cada nueva dimensión, se incrementa el total de elementos, por lo que es aconsejable definir tamaños apropiados para evitar un consumo excesivo de memoria.
Manejo de strings en C
Las cadenas en C se representan utilizando arreglos de caracteres terminados con un carácter nulo ('\0'
). Este carácter marca el final de la cadena y permite que las funciones de <string.h>
identifiquen dónde termina el texto. Manejar adecuadamente el terminador es esencial para evitar lecturas fuera de rango.
La mayoría de las funciones de manipulación de cadenas requieren incluir string.h
. A continuación, se explican algunas de las funciones más comunes, junto con ejemplos prácticos.
strlen()
: Obtener la longitud de una cadena
La función strlen()
devuelve la longitud real de la cadena sin contar el '\0'
. Por ejemplo:
#include <stdio.h>
#include <string.h>
int main(void) {
char frase[] = "Hola C";
int longitud = strlen(frase); // 6
printf("Longitud: %d\n", longitud);
return 0;
}
En este caso, se imprime el número total de caracteres visibles en la variable frase
.
strcpy()
y strncpy()
: Copiar cadenas
La función strcpy()
transfiere el contenido de la fuente (src
) a la cadena destino (dest
). Es fundamental que la cadena destino tenga suficiente espacio para almacenar todos los caracteres más el terminador nulo. Si deseas limitar el número de caracteres copiados, utiliza strncpy()
.
Ejemplo con strcpy()
y strncpy()
:
#include <stdio.h>
#include <string.h>
int main(void) {
char origen[] = "Programación en C";
char destino1[20];
char destino2[10];
strcpy(destino1, origen); // Copia completa
strncpy(destino2, origen, 9); // Copia los primeros 9 caracteres
destino2[9] = '\0'; // Asegura el terminador nulo
printf("Destino 1: %s\n", destino1);
printf("Destino 2: %s\n", destino2);
return 0;
}
strcat()
y strncat()
: Concatenar cadenas
La función strcat()
añade la segunda cadena al final de la primera. Para evitar desbordamientos, se recomienda usar strncat()
, que permite especificar un número máximo de caracteres a concatenar.
Ejemplo con strcat()
y strncat()
:
#include <stdio.h>
#include <string.h>
int main(void) {
char saludo[30] = "Hola";
char nombre[] = " Mundo";
strcat(saludo, nombre); // Concatena completo
printf("Concatenado completo: %s\n", saludo);
char saludo2[30] = "Hola";
strncat(saludo2, nombre, 3); // Concatena los primeros 3 caracteres
printf("Concatenado parcial: %s\n", saludo2);
return 0;
}
strcmp()
y strncmp()
: Comparar cadenas
La función strcmp()
compara dos cadenas y devuelve un valor negativo, cero o positivo dependiendo del orden lexicográfico. Para comparar solo los primeros caracteres, se usa strncmp()
.
Ejemplo con strcmp()
y strncmp()
:
#include <stdio.h>
#include <string.h>
int main(void) {
char cadena1[] = "Hola";
char cadena2[] = "hola";
int resultado = strcmp(cadena1, cadena2);
if (resultado == 0) {
printf("Las cadenas son iguales.\n");
} else if (resultado < 0) {
printf("'%s' es menor que '%s'.\n", cadena1, cadena2);
} else {
printf("'%s' es mayor que '%s'.\n", cadena1, cadena2);
}
// Comparar solo los primeros 3 caracteres
if (strncmp(cadena1, cadena2, 3) == 0) {
printf("Las primeras 3 letras son iguales.\n");
} else {
printf("Las primeras 3 letras son diferentes.\n");
}
return 0;
}
snprintf()
: Formatear cadenas con precisión
La función snprintf()
permite escribir una cadena formateada en un buffer, especificando la longitud máxima que se debe escribir. Esto previene desbordamientos en el buffer.
Ejemplo con snprintf()
:
#include <stdio.h>
int main(void) {
char buffer[50];
int edad = 25;
snprintf(buffer, sizeof(buffer), "Tengo %d años.", edad);
printf("Mensaje formateado: %s\n", buffer);
return 0;
}
En este ejemplo, el mensaje se compone de una cadena fija y un valor numérico (edad
), asegurándose de no exceder el tamaño del buffer.
Todas las lecciones de C
Accede a todas las lecciones de C y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A C
Introducción Y Entorno
Primer Programa En C
Introducción Y Entorno
Estructura Básica De Un Programa En C
Sintaxis
Operadores Y Expresiones
Sintaxis
Control De Flujo
Sintaxis
Arrays Y Manejo De Cadenas
Sintaxis
Funciones
Funciones Y Punteros
Punteros
Funciones Y Punteros
Gestión De Memoria Dinámica
Funciones Y Punteros
Estructuras En C
Estructuras, Uniones Y Tipos
Uniones Y Enumeraciones
Estructuras, Uniones Y Tipos
Typedef Y Y Organización De Código
Estructuras, Uniones Y Tipos
Archivos
Io Y Archivos
E/s Binaria Y Formateo
Io Y Archivos
Manipulación Avanzada De Cadenas
Io Y Archivos
En esta lección
Objetivos de aprendizaje de esta lección
- Declarar arrays unidimensionales.
- Inicializar y modificar datos de arrays.
- Utilizar bucles para recorrer arrays.
- Declarar y manejar arrays multidimensionales.
- Aplicar funciones de la biblioteca
<string.h>
para manipular cadenas.