[ Foro de C++ ]

PROBLEMAS CON LA FUNCION STRCPY EN STRING...

02-Dec-2010 19:26
oscar gomez
2 Respuestas

Cordial saludo profesor Nacho Cabanes, agradecerte tu tiempo para con nosotros.

Profesor es que no se por que no me permite compilar el siguiente codigo, utilizando la funcion strcpy(),si me puedes explicar el por que me servira de mucha ayuda.estoy trabajando con dev c++ 4.9.9.2

#include <iostream>
#include <string.h>

using namespace std;
main()
{

 string s2[8];
 string s1[8];
 s2="oscarin";
 strcpy(s1,s2);

 cout<<s2<<"\n";
 cout<<s1;


system("pause");
}

en la compilacion me dice mas o menos que incompatibilidad de tipos, pero no se por que si "s2" y "s1" son del mismo tipo( es decir son string) y la longitud de la cadena s2 es de 7 mas el caracter '\n' daria las 8 posiciones que posee el string en su definicion, por favor aclarame en que estoy mal, mil gracias
por tu respuesta


04-Dec-2010 12:58
Nacho Cabanes (+83)

No mezcles cosas: strcpy se usa para cadenas "al estilo C" (arrays de caracteres, char[]), no para cadenas de C++ (string). O usas cadenas al estilo de C (poco recomendable si estás aprendiendo C++) o las usas al estilo de C++ (y entonces debes dejar de lado todas las funciones str****, que no son aplicables).

Además, string s2[8] no es una cadena de 8 caracteres, sino un array que contiene 8 cadenas.

La idea es que en C no puedes comparar cadenas usando ==, porque estarías mirando la dirección de memoria, no el contenido, y por eso hay que usar "strcmp". De igual modo, no puedes asignar valores usando "=", porque estarías haciendo que estén en la misma dirección de memoria, y a partir de entonces, los cambios que hagas a una cadena se harían también en la otra, y por eso debes usar "strcpy".

Pero eso no ocurre con C++, que es un lenguaje mucho más moderno y preve ese tipo de cosas, para resultar más amigable (y más potente),de modo que sí puede asignar valores con = y comparar con ==

Por eso, tu fuente podria ser simplemente

#include <iostream>

using namespace std;
main()
{

 string s2;
 string s1;
 s2 = "oscarin";
 s1 = s2;

 cout << s2 << "\n";
 cout << s1;

 system("pause");
}

(es recomendable, por legibilidad, dejar espacios entre las palabras y los operadores).

Para más detalles, mira el apartado 2 del curso:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=341


04-Dec-2010 20:04
oscar gomez

Cordial saludo profesor, muy agradecido por su respuesta la verdad la explicacion es bastante clara y me has ayudado a aclarar mi confusion,muchas gracias por tu tiempo y explicacion.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)