Cuando trabajamos con archivos en C, llega un momento en que no solo queremos leer datos, sino también escribirlos. Para ello, contamos con funciones específicas que nos facilitan esta tarea, y hoy vamos a centrarnos en dos de ellas: fputc y fputs. Ambas nos permiten escribir en archivos, pero cada una tiene su particularidad y uso adecuado según lo que necesitemos.
Primero, es fundamental recordar que para escribir en un archivo debemos abrirlo en modo escritura. Esto lo hacemos con fopen y el modo "w". Al usar este modo, el archivo se crea o se trunca, es decir, se borra todo su contenido previo y queda vacío para empezar a escribir desde cero. Si no queremos perder el contenido anterior, tendríamos que usar modos como append o read-write, pero para entender estas funciones, el modo "w" es el más sencillo y directo.
La función fputc está diseñada para escribir un solo carácter en el archivo. Su uso es muy simple: le pasamos el carácter que queremos escribir, siempre entre comillas simples porque es un char, y el descriptor del archivo. Por ejemplo, si queremos escribir la letra 'h', simplemente llamamos a fputc('h', archivo). Si repetimos esta llamada varias veces, iremos añadiendo caracteres uno a uno. Pero hay que tener en cuenta que si abrimos el archivo con "w" cada vez que lo abrimos, el contenido anterior se borra, así que si queremos escribir varias letras seguidas, debemos hacerlo en la misma sesión o manejar el archivo de otra forma.
Aunque fputc es útil para escribir caracteres individuales, puede resultar lento o tedioso si queremos escribir cadenas completas. Aquí es donde entra fputs, que nos permite escribir una cadena de caracteres completa de una sola vez. Por ejemplo, si queremos escribir "hola" en el archivo, con fputs("hola", archivo) lo hacemos de forma rápida y sencilla. Esto es especialmente útil cuando tenemos textos o mensajes completos que queremos guardar sin tener que escribir carácter por carácter.
Un aspecto importante al usar estas funciones es verificar si la escritura ha sido exitosa. En el caso de fputc, si la escritura se realiza correctamente, la función devuelve el mismo carácter que hemos escrito. Pero si ocurre algún error, como intentar escribir en un archivo abierto solo para lectura o problemas con el dispositivo de almacenamiento, fputc devuelve EOF. Por lo tanto, podemos comprobar el resultado y saber si la operación fue exitosa o no.
Con fputs sucede algo similar, aunque su retorno es un poco diferente. Si la escritura es exitosa, devuelve un valor no negativo, pero no necesariamente el número de caracteres escritos ni el contenido exacto. Si falla, también devuelve EOF. Por eso, al usar fputs, basta con comprobar que el valor devuelto no sea EOF para asegurarnos de que la escritura fue correcta.
Veamos un ejemplo sencillo que ilustra el uso de ambas funciones:
#include <stdio.h>
int main() {
FILE *archivo = fopen("saludo.txt", "w");
if (archivo == NULL) {
perror("Error al abrir el archivo");
return 1;
}
// Escribir caracteres individuales con fputc
if (fputc('H', archivo) == EOF) {
perror("Error al escribir con fputc");
}
if (fputc('o', archivo) == EOF) {
perror("Error al escribir con fputc");
}
if (fputc('l', archivo) == EOF) {
perror("Error al escribir con fputc");
}
if (fputc('a', archivo) == EOF) {
perror("Error al escribir con fputc");
}
// Escribir una cadena completa con fputs
if (fputs("\nBuenos días, ¿cómo te encuentras hoy?", archivo) == EOF) {
perror("Error al escribir con fputs");
}
fclose(archivo);
return 0;
}
En este código, primero abrimos el archivo "saludo.txt" en modo escritura. Luego, escribimos la palabra "Hola" carácter por carácter con fputc, comprobando en cada llamada si hubo error. Después, escribimos una frase completa con fputs, también verificando el resultado. Finalmente, cerramos el archivo para asegurarnos de que los datos se guarden correctamente.
Con estas funciones ya podemos empezar a crear archivos con contenido personalizado. Además, si combinamos estas técnicas con otras funciones de manejo de archivos, como fseek o ftell, podemos hacer operaciones más avanzadas, como movernos dentro del archivo para sobreescribir datos o leer y escribir en diferentes posiciones.
Así, con fputc y fputs tenemos herramientas básicas pero potentes para escribir en archivos en C, desde caracteres individuales hasta cadenas completas, siempre cuidando de abrir el archivo en el modo adecuado y verificar que la escritura se realice sin problemas.