Introducción

El tipo de dato cadena, al menos en los estándares de C, no existe.

Una cadena es un arreglo de caracteres, o sea, del tipo char.

Por lo tanto, para declarar un arreglo de cadenas o strings en C necesitamos un arreglo de caracteres bidimensional, porque tendrá arreglos dentro de un arreglo.

Veamos hoy cómo declararlo, calcular su tamaño, recorrerlo y pasarlo como argumento a una función en C.

Declarar un arreglo de cadenas

Lo malo de esto es que no podemos confiar en que el compilador pondrá la longitud automáticamente. Por ejemplo, cuando declaramos una cadena podemos hacer esto:

char busqueda[] = {"Comadreja"};

Ahí, no declaramos la longitud de la cadena pero el compilador se la pondrá. No pasa lo mismo con un arreglo de cadenas.

La forma con la que soñamos es:

char arreglo[][] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};

Pero no, no es así. Si intentamos compilar, GCC u otro compilador nos avisará que todas las dimensiones del arreglo deben tener límites, excepto la primera.

O sea que estamos obligados a poner la longitud de las cadenas que podrá albergar el arreglo. Así:

char arreglo[][50] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};

En ese caso, el compilador calculará la cantidad de cadenas que hay, pero nosotros le decimos cuál es la longitud máxima.

En resumen, podemos poner cadenas de hasta 50 caracteres dentro de nuestro arreglo.

Pero no te confundas, ese número lo ponemos nosotros, puedes cambiarlo a 9999 si quieres, o ponerlo en un macro al inicio:

#define MAXIMA_LONGITUD_CADENA 50

Y declarar el arreglo así:

char arreglo[][MAXIMA_LONGITUD_CADENA] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};

De esta manera puedes cambiar la longitud rápidamente.

Calcular tamaño de arreglo de cadenas en C

Igualmente usamos sizeof para calcular el tamaño, como lo vimos hace algún tiempo.

Para la longitud de un arreglo de cadenas nada cambia, así se calcula:

int longitudDelArreglo = sizeof(arreglo) / sizeof(arreglo[0]);

Un programa que imprime su longitud y que nos sirve de ejemplo es este:

/*
    Trabajando con arreglos de cadenas en C
    @author parzibyte
*/#include <stdio.h>
#define MAXIMA_LONGITUD_CADENA 50
 
int main(){
    char arreglo[][MAXIMA_LONGITUD_CADENA] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};
    int longitudDelArreglo = sizeof(arreglo) / sizeof(arreglo[0]);
    printf("El arreglo mide: %d", longitudDelArreglo);
}

Al ejecutarlo, la salida será El arreglo mide: 6

Recorrer arreglo de cadenas en C

Igual que los otros. Aquí el código necesario, pues es casi la combinación de lo de arriba:

/*
    Trabajando con arreglos de cadenas en C: recorrer uno
    @author parzibyte
*/#include <stdio.h>
#define MAXIMA_LONGITUD_CADENA 50
 
int main(){
    char arreglo[][MAXIMA_LONGITUD_CADENA] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};
    int longitudDelArreglo = sizeof(arreglo) / sizeof(arreglo[0]);
    for(int x = 0; x < longitudDelArreglo; x++){
        printf("En %d el arreglo tiene el valor %s\n", x, arreglo[x]);
    }
}

Es un ciclo for a partir de que ya tenemos el tamaño o longitud del arreglo. Y dentro del arreglo hay cadenas.

Pasar un arreglo de cadenas como argumento a una función en C

Para terminar veremos cómo podemos llamar a una función y pasarle nuestro arreglo de cadenas; dentro de la función simplemente lo vamos a recorrer.

Si queremos recibir un arreglo, debemos definir sus límites al igual que cuando lo declaramos. Así:

void funcion(char arreglo[][20]){
 
}

No debemos especificar la longitud del mismo, pero sí de lo que contiene. Para llamar a una función, primero declaramos el arreglo y se lo pasamos sin más.

Aquí un ejemplo:

/*
    Trabajando con arreglos de cadenas en C:
        Pasarlo como argumento a función
    @author parzibyte
*/#include <stdio.h>
#define MAXIMA_LONGITUD_CADENA 50
 
void imprimirArregloDeCadenas(char arreglo[][MAXIMA_LONGITUD_CADENA], int longitudDelArreglo);
 
int main(){
    char arreglo[][MAXIMA_LONGITUD_CADENA] = {"Arsenal", "Bautizo", "Comadreja", "Consulta", "Dinosaurio", "Zapato"};
    int longitudDelArreglo = sizeof(arreglo) / sizeof(arreglo[0]);
    imprimirArregloDeCadenas(arreglo, longitudDelArreglo);
}
 
void imprimirArregloDeCadenas(char arreglo[][MAXIMA_LONGITUD_CADENA], int longitudDelArreglo){
    for(int x = 0; x < longitudDelArreglo; x++){
        printf("En %d el arreglo tiene el valor %s\n", x, arreglo[x]);
    }
}

Combinando todo lo de arriba, podemos usar a la función del preprocesador para que ponga los límites dependiendo de MAXIMA_LONGITUD_CADENA.

De esta manera podemos llamar a funciones con arreglos de cadenas en C.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.