Ver Mensaje Individual
  #5  
Antiguo 24-06-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 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