Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2015
darkmir darkmir is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 28
Poder: 0
darkmir Va por buen camino
Convertir AnsiString a char[260]

Hola amigos,

tengo un problemita, necesito asiganr un texto en AnsiString a un de char[]....

Código:
AnsiString name;

char name2[MAX_PATH] =  name;
ya utilize name.c_str(), pero me sigue saliendo error de conversión.... como podría convertir ese AnsiString a char[]?

[bcc32 Error] Unit1.cpp(120): E2034 Cannot convert 'AnsiString' to 'char[260]'

Saludos y gracias de antemano.
Responder Con Cita
  #2  
Antiguo 24-06-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
c_str() te devuelve un puntero al buffer ASCIIZ del String, para asignarlo a un array tipo char[] deber copiar el contenido:

Código:
AnsiString name = "lo que sea";

char name2[MAX_PATH];
strncpy(name2, name.c_str(), name.Length());
Ten en cuenta que name2 debe tener reservada memoria suficiente para contener name, en caso contrario se trunca la cadena.


Saludos.
Responder Con Cita
  #3  
Antiguo 24-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción para este caso es strcpy,
Código PHP:
  AnsiString name "una cadena cualquiera";
  
char name2[MAX_PATH];

  
strcpy(name2name.c_str()); 

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 24-06-2015
darkmir darkmir is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 28
Poder: 0
darkmir Va por buen camino
listo y gracias

Gracias escafandra y ecfisa,

Ambos códigos me funcionaron, pero el código de escafandra con strncpy() me daba un problema, no me reconocia todos los AnsiString que convertía char[].

El código de ecfisa, si me reconocía todos los nombres que pasaba de AnsiString a char[], lo comento como dato para los que visiten este hilo.

Agrego que lo estoy trabajando con el Trial de Embarcadero XE8, quizás eso influye algo si es con builder o Embarcadero, ya que por lo que tengo entendido trabajan mas con builder.

Saludos y gracias.
Responder Con Cita
  #5  
Antiguo 24-06-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por darkmir Ver Mensaje
Ambos códigos me funcionaron, pero el código de escafandra con strncpy() me daba un problema, no me reconocia todos los AnsiString que convertía char[].

El código de ecfisa, si me reconocía todos los nombres que pasaba de AnsiString a char[], lo comento como dato para los que visiten este hilo.
Te diré que ambos códigos son el mismo, basabos en AnsiC. La diferencia entre strcpy y strncpy es que la segunda es las versión segura de la primera, sólo copia n caracteres o hasta que encuentre un carácter /0, evitando el desbordamiento de la pila.

Si dices que "no reconoce" todos los ansichar el problema lo vas a tener en que estén vacíos o en el cálculo de la longitud y no en la versión de la función.

No es muy recomendado el usno de strcpy por el riesgo de un desbordamiento de pila si no se tiene la precaución de tener un buffer lo suficientemente grande. Una cadena corrupta o inesperedamente larga lo producirá, para evitar eso se diseñó strncpy. El mismo Windows tiene versiones seguras de esta función en su API.

La forma segura de usar strncpy es esta:
Código:
AnsiString name = "lo que sea";

char name2[MAX_PATH];
strncpy(name2, name.c_str(), sizeof(name2)-1);  // limitas el desbordamiento del buffer y dejas espacio para el /0 final
Estudia las funciones de cadena de C y no hagas comentarios alarmistas a los nuevos en este lenguaje sobre el mal funcionamiento de funciones C estandar más que probadas.


Saludos.

Última edición por escafandra fecha: 24-06-2015 a las 20:26:14.
Responder Con Cita
  #6  
Antiguo 24-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola escafandra.

Recién ahora lo noto y creo que la razón del problema que menciona darkmir es debido al valor pasado al argumento maxlen en el primer ejemplo de strncpy.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 25-06-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Evidentemente, ecfisa.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda convertir de int a char array mizzard C++ Builder 3 17-04-2011 11:14:47
Conversión unsigned char a AnsiString NPIdea C++ Builder 3 20-01-2011 09:28:51
Convertir char*, char[], string lmpadron C++ Builder 2 29-10-2010 09:08:45
convertir int o char a hexadecimal. bactering C++ Builder 2 05-10-2008 21:18:45
Convertir un Single en 4 char cmurua71 Varios 4 15-06-2007 11:25:26


La franja horaria es GMT +2. Ahora son las 14:18:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi