jueves, 13 de diciembre de 2007

Concatenando cadenas en C...

Voy a plantearos una solucion al problema de concatenar cadenas. Si bien tenemos una funcion que nos lo hace, podemos hacer "inventos" con funciones parecidas a las que ya conocemos.

En este caso, voy a introducir el uso del "procedimiento" sprintf() ("procedimiento" porque en C, tanto el procedimiento como la funcion devuelven al menos un valor)

sprintf funciona como nuestra conocida printf, con la unica diferencia que, antes de la cadena patron indicamos el nombre de una variable de tipo cadena. El resultado es que, en dicha variable, se graba una cadena con el formato indicado y con los valores indicados tambien. En esencia, es como si el resultado de printf lo guardaramos en la variable, en lugar de presentarlo en pantalla.

Veamos un ejemplo de como concatenar cadenas:


#include <stdio.h>
int main(){
char cadena[4]="hola";

printf("cadena inicial: %s\n", cadena);

// concatenamos...
sprintf(cadena, "%s%s", cadena, cadena);

printf("cadena concatenada: %s\n", cadena);

}
Probadlo, el resultado es interesante... Ahora bien, no aseguro su funcionamiento en el compilador DevC++ (es una verdadera castaña, por no decir palabras mayores...)

6 comentarios:

el aprendiz dijo...

Si defines:

char cadena[4]="hola";

,te va a dar problemas porque el array no tiene sitio para poner '\0'. Tienes que definirlo:

char cadena[5]="hola";

ó

char cadena[]="hola";

Mira ver si así no te da problemas el DevC++.

Vegetta dijo...

Se que es viejo el post, pero es correcto. En los arrays de char, si defines 4 elementos, ya que hay 0,1,2,3,4 elementos :) en total 5.

Salu2!

ninten dijo...

También sé que es viejo el post, pero creo que el último comentario no es correcto. Si reservas 4 elementos para el array, obtienes 0,1,2,3 elementos, en total 4.

También soy estudiante pero es lo que me suena xD.

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Olvituso dijo...

En c, cuando se declara un array de esta forma:
char cadena [n]
solo tienes n posiciones, de la 0 hasta la n-1. Siendo la última posición el carácte '/0' que es el indicador de fin de cadena.

Un saludo.

Anais dijo...

El verdadero problema de este código no es el '\0' del final, que en el caso de tratarse de la cadena "hola" con poner "char cadena[4]" efectivamente, es suficiente. El problema es que en el programa se está concatenando la cadena consigo misma, y la variable cadena no tiene espacio para "holahola".
La solución sería poner "char cadena[8]", con lo cual tendríamos espacio para "holahola" (incluyendo el '\0' que estaría en la posición 8).