Lección 11 · 11 de 20
Cadenas de caracteres · C
Trabaje con textos en C como arrays de char terminados en '\0', con las funciones de string.h: strlen, strcpy, strcat y strcmp.

En C, un texto o cadena es un array de char que termina con el carácter especial `'\0'`. char city[20] = "Madrid" ocupa 20 bytes, pero solo usa 7: las seis letras y el '\0'. `strlen` cuenta las letras hasta el '\0' (6), mientras que sizeof da el tamaño del array (20). Como cualquier array, cada letra se lee con su índice: city[0].
Un array no se puede copiar con =. Para eso está `strcpy(destino, origen)`, de string.h. La copia es independiente: cambiar copy[0] a 'm' no toca city. `strcat` añade un texto al final de otro. En ambos casos, el destino debe tener sitio suficiente; si no, se escribiría fuera del array.
Tampoco se comparan con ==. `strcmp(a, b)` devuelve 0 si son iguales, un número negativo si a va antes en orden alfabético y uno positivo si va después. Como "pear" va después de "apple", gana el último else.
Para recorrer una cadena basta con avanzar hasta encontrar el '\0': el for del final lo hace y cuenta las o de greeting.
Código · main.c
#include <stdio.h>#include <string.h>int main(void) { // A string is a char array that ends with the character '\0'. char city[20] = "Madrid"; printf("%s has %zu letters\n", city, strlen(city)); printf("The array has room for %zu chars\n", sizeof(city)); printf("First: %c, last: %c\n", city[0], city[strlen(city) - 1]); // = cannot copy an array: strcpy copies the text. char copy[20]; strcpy(copy, city); copy[0] = 'm'; printf("Original: %s, copy: %s\n", city, copy); // strcat adds text at the end (there must be room for it). char greeting[40] = "Hello from "; strcat(greeting, city); printf("%s\n", greeting); // strcmp gives 0 if equal, <0 or >0 for alphabetical order. char a[] = "pear", b[] = "apple"; if (strcmp(a, b) == 0) printf("Same fruit\n"); else if (strcmp(a, b) < 0) printf("%s comes before %s\n", a, b); else printf("%s comes before %s\n", b, a); // Walk the string until '\0', counting the letter 'o'. int found = 0; for (int i = 0; greeting[i] != '\0'; i++) if (greeting[i] == 'o') found++; printf("'%s' has the letter o %d times\n", greeting, found); return 0;}Salida · cc main.c -o main && ./main
Madrid has 6 letters The array has room for 20 chars First: M, last: d Original: Madrid, copy: madrid Hello from Madrid apple comes before pear 'Hello from Madrid' has the letter o 2 times
Para recordar
- Una cadena es un array de
charque acaba en'\0'. strlencuenta letras;sizeofmide el array.strcpycopia ystrcatañade: el destino necesita sitio.strcmpda 0 si los textos son iguales.- Los textos no se copian con
=ni se comparan con==.
Ejercicio
Recorra greeting y convierta cada letra minúscula en mayúscula restándole 'a' - 'A'; después escríbalo (debe salir HELLO FROM MADRID).