Tutorial de Programación en C para Linux Parte 9 : Cadenas

En esta serie de tutoriales sobre programación en C, ya hemos tratado el concepto de matrices de caracteres. Estrechamente relacionado con las matrices de caracteres está el concepto de cadena, que trataremos aquí.

Una cadena se diferencia de una matriz de caracteres en un aspecto importante: termina con un carácter nulo’\0′. En una cadena de caracteres no existe este carácter de terminación. El siguiente fragmento de código muestra algunas formas de definir una cadena:

#include <stdio.h>

int main()
{
char str[] = «string»;
char str1[] = {‘s’,’t’,’r’,’i’,’n’,’g’,’\0′};
char str2[10] = «string»;
char str3[10] = {‘s’,’t’,’r’,’i’,’n’,’g’,’\0′};
char *str4 = «string»;

printf(«\n str=%s, str1=%s, str2=%s, str3=%s, and str4=%s», str, str1, str2, str3, str4);

return 0;
}

Así, un montón de caracteres entre comillas dobles es una cadena (el carácter Nulo de terminación está implícito en ella), y una serie de caracteres que terminan explícitamente con un carácter \0 también es una cadena.

La salida de este programa es

 str=string, str1=string, str2=string, str3=string, and str4=string

Ten en cuenta que no puedes imprimir matrices de caracteres que no sean cadenas de esta forma, ya que no hay ningún carácter Nulo de terminación que indique el final de la matriz. Aquí tienes un trozo de código que intenta hacer esto:

#include <stdio.h>

int main()
{
char str[] = {‘e’,’n’,’d’};
char c =’t’;

printf(«\n str=%s», str);

return 0;
}

Pero acaba imprimiendo valores basura al final:

str=end??

Siguiendo, igual que el especificador de formato %s en «Printf» indica al compilador que trate las variables de entrada como cadenas, también puedes utilizar %s en la función «scanf» para aceptar cadenas como entrada del usuario. Aquí tienes un ejemplo:

#include <stdio.h>

int main()
{
char str[30];

printf(«\n Enter a string with length less than 30 characters: «);
scanf(«%s»,str);

printf(«\n str=%s», str);

return 0;
}

Cabe mencionar que una secuencia de cero o más caracteres rodeados de comillas dobles se denomina constante de cadena o literal de cadena. Esto significa que tanto «howtoforge» como «» son constantes de cadena o literales de cadena.

Puedes encontrar la longitud de una cadena utilizando la función estándar strlen(). Aquí tienes un ejemplo:

#include <stdio.h>

int main()
{
char str[] = «howtoforge»;

printf(«\n Length of string ‘howtoforge’ is: %d», strlen(str));

return 0;
}

La salida producida por este programa es 10, que es exactamente el número de caracteres de «howtoforge», y por tanto su longitud.

A continuación, conviene tener en cuenta que un carácter entre comillas simples (como «d») y un carácter entre comillas dobles (como «d») son diferentes entre sí. Mientras que el primero es una constante de carácter (que puede utilizarse para producir el valor numérico del carácter en el juego de caracteres de la máquina), el segundo es una cadena (lo que significa que contiene un carácter \0 de terminación).

Por último, veamos rápidamente cómo se pueden pasar cadenas como argumentos a las funciones.

#include <stdio.h>

void change_value(char s[])
{
s[0] = ‘H’;
s[5] = ‘F’;

printf(«%s», s);

}

int main()
{
char str[] = «howtoforge»;

change_value(str);

return 0;
}

Así, en el programa anterior, es el nombre de la matriz ‘str’ el que se pasa como argumento porque hace referencia a la dirección base de la matriz. La declaración de la función «cambiar_valor» es tal que espera una matriz como entrada. Aquí tienes la salida de este programa:

HowtoForge

Conclusión

En este tutorial hemos tratado los conceptos básicos de las cadenas, incluyendo cómo se definen y cómo se pueden utilizar. Aprenderemos más cosas sobre las cadenas en los próximos tutoriales, pero este artículo debería bastar para que empieces. Haznos saber en los comentarios de abajo si tienes alguna consulta o duda relacionada con las cadenas.

Scroll al inicio