CString sCadena(szCadenaEstiloC):ph34r:
NormalPero este codigo que has colocado es muy peligroso y en alguncos compiladores , y segun las opciones de compilacion que establescas , nisiquiera se dejara compilar.Código: Text
CString str; char* cad ="cadena"; str=cad;
Pero este codigo que has colocado es muy peligroso y en alguncos compiladores , y segun las opciones de compilacion que establescas , nisiquiera se dejara compilar.Todo eso que acabas de decir es incorrecto lamentablemente, no es peligroso en lo mas minimo.
1- le asignas una cadena a un puntero, no una direccion de memoria
2- no has reservado memoria para donde apunte el puntero
3- la cadena no termina en nulo
OK buen punto, eso en visual C++ pero en otros?Esto lo compila cualquier compilador de C y funciona perfectamente:
pero el codigo que genera?Una salida por consola que dice 99 :lol: :D :lol:
he actualizado mi post anterior porque estaba incompleto.No cambia nada ... ¿Esto te parece que no funciona en algun compilador?
claro, pero digo el ejemplo de arriba.No hay diferencia, lee las respuestas y trata de entender como funciona un ejecutable, asi te vas a dar cuenta de que no hay ninguna diferencia entre pasarle una cadena como parametro a una funcion y asignarle la direccion de comienzo de esa cadena a un puntero.
OK, pero mi duda viene de queMas bien tu duda viene de desconocer la POO en C++. CString es una clase y no un tipo, str es un objeto ya que contrariamente a lo que decis si esta instanciado ahi mismo.
CString str;
char* cad ="cadena";
str=cad;
Es decir str no se ha instanciado, solo definido.. deceonozco como funciona el TIpo CString porque nunca lo he usado y no se como sea internamente pero si es algo mas elaborado que solo otra forma de escribir char *... supongo que deberia resultar en un problema... pero bueno no tengo ni idea de como sea eso.
Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.
Para intsnciar instanciar la clase no se requeriria hacer uso de new?
Y si en lo primero que dije estaba equivocado de acuerdo a tu explicacion, pero la duda me ha desembocado en lo del CString.
Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:Cita de: "JuanK"Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.
Para instanciar la clase no se requeriria hacer uso de new?
No y por eso dije que: "Mas bien tu duda viene de desconocer la POO en C++".
Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:
Porque no se requiere instanciar el tipo CString en C++?
Quien dice que no se requiere declarar CString? :blink:Cita de: "Eternal Idol"Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:Cita de: "JuanK"Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.
Para instanciar la clase no se requeriria hacer uso de new?
No y por eso dije que: "Mas bien tu duda viene de desconocer la POO en C++".
Porque no se requiere instanciar el tipo CString en C++?
Quien dice que no se requiere declarar CString? :blink:
No necesariamente se debe hacer uso del operador new para instanciar, es para manejo(reserva) de memoria.
Bueno pero en todo caso, al declarar una instancia de la clase CString, internamente en su definición si hara su reserva de memoria con NEW, MALLOC o como la quiera reservar el Forrest Gump de turno...Ni new ni malloc ... si relees este hilo tal vez sepas en que tipo de memoria esta ...