/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con strcpy

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Xedrox



Registrado: 27 Dic 2012
Mensajes: 20

MensajePublicado: 27/12/2012 7:13 am
Título: Problema con strcpy

Cuando uso dos "strcpy" consecutivos, no se porque se pierde la asignación de los valores anteriores, como puedo resolver este problema?? Muchas gracias!

Código:

#include <stdio.h>
#include <string.h>

int main()
{
   char s1[6];
   char s2[6];

   strcpy( s1, "aaaaaa" );
   strcpy( s2, "bbbbbb" );
   printf( "%s\n", s1 );
   printf( "%s", s2 );
   return 0;
}


Salida por consola:

Código:


bbbbbb


Salida que queria:

Código:

aaaaaa
bbbbbb
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 27/12/2012 7:27 am
Título:

Si no me equivoco, cuando deseas asignarle a s1 una cadena de 6 caracteres en un array de chars que sólo tiene espacio para 6, estará errado.
Esto es porque la cadena "aaaaaa" en realidad representa 7 elementos, pues añade la marca de fin de cadena, es decir, '\0'.

EDIT: Confirmado. Si defines los arreglos como arrays de 7 elementos obtienes la sala que querías Smile

Me parece que en C++ sería lo siguiente:
Código:
#include <iostream>
#include <string>
using namespace std;

int main()
{
   string s1, s2;

   s1 = "aaaaaa";
   s2 = "bbbbbb";
   cout<<s1<<"\n"<<s2;

   return 0;
}

Y no debes preocuparte por la cantidad de caracteres, porque todo eso lo gestiona la clase string, y solo debes usar sus métodos.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 27/12/2012 8:06 am
Título:

Lo primero que debes hacer es conseguir un buen curso o libro, para los primeros revisa la sección "Cursos" de este sitio y para los segundos utiliza el motor de búsqueda de los foros.

Como ya te comentaron los arrays que declaras no tienen el tamaño para almacenar todos los caracteres, ya desde ahí el programa esta mal.

La salida en tu programa es la esperada ya que la función strcpy copia la cadena (segundo argumento) en el array indicado (primer argumento), la cadena almacenada (si la hay) se pierde con ello. La función que debes utilizar para concatenar las cadenas es strcat y debes, antes de la llamada, verificar si esta tiene la capacidad de almacenar las dos cadenas.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
Xedrox



Registrado: 27 Dic 2012
Mensajes: 20

MensajePublicado: 27/12/2012 9:12 am
Título:

rir3760 escribió:
Lo primero que debes hacer es conseguir un buen curso o libro, para los primeros revisa la sección "Cursos" de este sitio y para los segundos utiliza el motor de búsqueda de los foros.

Como ya te comentaron los arrays que declaras no tienen el tamaño para almacenar todos los caracteres, ya desde ahí el programa esta mal.

La salida en tu programa es la esperada ya que la función strcpy copia la cadena (segundo argumento) en el array indicado (primer argumento), la cadena almacenada (si la hay) se pierde con ello. La función que debes utilizar para concatenar las cadenas es strcat y debes, antes de la llamada, verificar si esta tiene la capacidad de almacenar las dos cadenas.

Un saludo


Hay algo que no me queda claro, como hago para inicializar simplemente en C una cadena, pero no al momento de declarla, luego, algo asi:

Código:

char prueba[7];

prueba="aaaaaa";



Esto asi no compila por el siguiente error:

[Error] invalid array assignment
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 27/12/2012 9:19 am
Título:

char *prueba = "HOLA MUNDO";

Piensa que es de sólo lectura.
_________________
Mi página web (en inglés):
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 27/12/2012 9:31 am
Título:

Xedrox escribió:
Hay algo que no me queda claro, como hago para inicializar simplemente en C una cadena, pero no al momento de declarla, luego, algo asi:
Código:
char prueba[7];

prueba="aaaaaa";

Esto asi no compila por el siguiente error:
[Error] invalid array assignment

* Inicializacion se refiere al valor inicial de un objeto en su declaración, por ejemplo:
Código:
char array[] = "hola";


* Asignación se refiere al almacenamiento de un valor en el objeto en cualquier otro momento. En el caso de los arrays no puedes tratarlos como una unidad, por ejemplo y como mencionas el uso del operador "=" no es valido. En su lugar debes utilizar (aquí si) la función strcpy:
Código:
strcpy(array, "casa");


Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com