• Miércoles 6 de Noviembre de 2024, 07:01

Autor Tema:  Re: Conversion de tipos con char*  (Leído 1249 veces)

LamKros

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
    • http://www.lamkros.com
Re: Conversion de tipos con char*
« en: Miércoles 30 de Abril de 2003, 18:54 »
0
Hola, estoy usando la libreria string.h para manejar cadenas de caracteres y quiero pasar una cadena de caracteres del tipo char *cad    a  una cadena de caracteres del tipo char cadena[MAXCAD].
El problema q tengo es q tengo definidas una serie de funciones con sus parametros formales de la segunda forma y cuando le paso a la funcion como parametro una cadena con un puntero char* no funciona, asi q estoy buscando la forma de pasar un char* a char cadena[MAXCAD]. He probado con la strcpy(cadena,ptr_a_char)  y no me va. Ni tampoco me funciona el siguiente procedimiento:

const int MAXCAD = 20;
typedef char TCadena[MAXCAD];

void Charptr_TCadena(TCadena & s1,char *s2)
{
   int i = 0;
   while (( i < MAXCAD)&&(s2 [ i ] ! = FINCAD))
   {
      s1 [ i ]=s2 [ i ];
      + + i;
   }
   s1 [i ] = FINCAD;
}


Ej.

char *s2 = "hola";
TCadena s1;

Charptr_TCadena(s1,s2);

lo que quiero es q en s1 quede "hola";
Ayuda, :think::question:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Conversion de tipos con char*
« Respuesta #1 en: Miércoles 30 de Abril de 2003, 20:55 »
0
Lo que haces es valido siempre y cuando ambos fueran arrays de tamaño definido, sin embargo solo uno de ellos lo es, y el otro es un apuntador a un dato tipo char, por lo cual no puedes determinar el largo de la cadena... soluciones:

1-La de aprender:

inicializa las variableas SIEMPRE, es una buena pratica.
 
Código: Text
  1.  
  2. #include<string.h>.
  3. .
  4. .
  5. char *s2 =NULL;//es un apuntador sin direccion, es decir null
  6. int tam=0,i=0;
  7. T_CADENA s1;
  8.  
  9. for(i=0;i<MAXCAD;i++)
  10.   s1='';
  11. i=0;
  12. s2="hola";/*com truco al final de la cadena
  13. agregamos el caracter null paa indicar
  14. que hasta alli llego*/
  15.  
  16. while(s2[i]!=NULL)//miramos el tamaño
  17. {
  18.    tam++;
  19.    i++;
  20. }
  21.  
  22. for(i=o;i<tam;i++)//copiamos
  23.     s1[i]=s2[i]
  24.  
  25.  

2-La forma practica resulta que la libreria string trae algunas funciones que nos pueden ayudar, asi que al inicio del programa deberas incluir el encabezado string.h

 
Código: Text
  1. #include<string.h>.
  2. .
  3. .
  4. char *s2 =NULL;//es un apuntador sin direccion, es decir null
  5. int tam=0,i=0;
  6. T_CADENA s1;
  7.  
  8. memset(s1,'',MAXCAD);//ESTA NO ES DE STRING.H
  9.  
  10. s2="hola";/*como truco al final de la cadena
  11. agregamos el caracter null para indicar
  12. que hasta alli llego
  13. normalmente se supone que en el
  14. sistema la cadena termina automaticamente con NULL
  15. pero no siempre estop es asi*/
  16.  
  17. strcpy(s1,s2);//copiamos la cadena
  18.  
  19.  

con respecto a esto:
void Charptr_TCadena(TCadena & s1,char *s2)

no es necesario el & , menos al recibir el parametro, esto les puede ocacionar errores, ya que s1 es un arreglo, es decir ya de por si es un apuntador a nua direccion de memoria.


tam=strlen(S2);//esto es mejor poara saber el tamaño

Suerte.

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

LamKros

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
    • http://www.lamkros.com
Conversion de tipos con char*
« Respuesta #2 en: Miércoles 30 de Abril de 2003, 21:08 »
0
Muchas gracias juank, ya e resuelto el problema, lo q estaba haciendo era valido, el problema que hacia q mi programa diese error en tiempo de ejecucion era q no manejaba bien los argumentos de la funcion main. Yo pensaba que era por que no hacia bien la conversion de cadena de caracteres de un argv[n] , y el problema real es q accedia a un n fuera de rango, de todas formas tu comentario me a ayudado a clarificar mis ideas al respecto del manejo de cadenas, muchas gracias. Un saludo.:gracias: