Strings en programación C: Dominando declaración, inicialización y E/S
Strings en programación C
Este tutorial recorre los fundamentos de los strings en C: declaración, inicialización, entrada/salida, uso en funciones, punteros y funciones de biblioteca esenciales.
En C, un string es un array de caracteres terminado por un byte nulo \0. Por ejemplo:
char c[] = "c string";
El compilador añade automáticamente \0 a un literal de string, convirtiéndolo en un string C válido.

¿Cómo declarar un string?
Los strings se declaran como arrays de caracteres. Por ejemplo:
char s[5];

Esto declara un búfer que puede contener hasta 4 caracteres más el \0 terminador.
¿Cómo inicializar strings?
Están disponibles varios estilos de inicialización:
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};

Cuidado con desbordamientos de búfer: char c[5] = "abcde"; intenta almacenar seis caracteres (incluyendo \0) en un array de cinco bytes y debe evitarse.
Asignar valores a strings
Los arrays no pueden asignarse después de la declaración. En su lugar, use strcpy():
char c[100];
strcpy(c, "C programming");
Nota: La asignación directa como c = "C programming"; causa error de compilación.
Lectura de strings desde el usuario
Use scanf() para entrada delimitada por espacios:
#include <stdio.h>
int main() {
char name[20];
printf("Introduzca nombre: ");
scanf("%s", name);
printf("Su nombre es %s.", name);
return 0;
}
Salida
Introduzca nombre: Dennis Ritchie Su nombre es Dennis.
Solo se captura la primera palabra porque scanf() se detiene en espacios en blanco. El nombre del array decae a un puntero, por lo que name se pasa directamente.
¿Cómo leer una línea completa?
Use fgets() y puts():
#include <stdio.h>
int main() {
char name[30];
printf("Introduzca nombre: ");
fgets(name, sizeof(name), stdin);
printf("Nombre: ");
puts(name);
return 0;
}
Salida
Introduzca nombre: Tom Hanks Nombre: Tom Hanks
fgets() lee hasta sizeof(name)-1 caracteres, incluyendo espacios. También retiene el salto de línea final, que puts() imprime.
Nota: gets() está obsoleto y fue eliminado del estándar C porque puede desbordar búferes.
Pasar strings a funciones
Los strings se pasan a funciones igual que los arrays. Ejemplo:
#include <stdio.h>
void displayString(char str[]);
int main() {
char str[50];
printf("Introduzca string: ");
fgets(str, sizeof(str), stdin);
displayString(str);
return 0;
}
void displayString(char str[]) {
printf("Salida del string: ");
puts(str);
}
Strings y punteros
Los nombres de string decaen a punteros, permitiendo aritmética de punteros:
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // H
printf("%c", *(name+1)); // a
printf("%c", *(name+7)); // o
char *namePtr = name;
printf("%c", *namePtr); // H
printf("%c", *(namePtr+1)); // a
printf("%c", *(namePtr+7)); // o
}
Funciones de string comúnmente usadas
- strlen() – devuelve la longitud de un string (excluyendo el terminador nulo).
- strcpy() – copia un string a otro.
- strcmp() – compara dos strings lexicográficamente.
- strcat() – concatena dos strings.
Lenguaje C
- Dominando strings en C#: Fundamentos, operaciones y técnicas avanzadas
- Dominando los Espacios de Nombres en C#: Organización, Ámbito y Mejores Prácticas
- Cómo Pasar Arrays a Funciones en C++: Guía Práctica
- Dominando los operadores en programación C: guía completa
- Dominando funciones de cadena en C++: strcpy, strcat, strlen, strcmp – Ejemplos prácticos
- Cadenas en C hechas fáciles: Declaración, entrada, salida y funciones de biblioteca
- Dominar la programación en C: Tutorial completo para principiantes
- Domine las Operaciones de Strings en Python: Replace, Join, Split, Reverse y Conversión de Mayúsculas/Minúsculas
- Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
- Dominando representaciones String en Enums de Java
- Clase String en Java: Dominando Creación y Manipulación de Cadenas