| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Xedrox
Registrado: 27 Dic 2012 Mensajes: 20
| Publicado: 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:
Salida que queria:
|
| | Volver arriba | |  | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 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 
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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |