• Viernes 8 de Noviembre de 2024, 17:57

Autor Tema:  Problemas como pasar char por referencia  (Leído 3478 veces)

cyberday

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problemas como pasar char por referencia
« en: Martes 30 de Noviembre de 2010, 05:35 »
0
Hola a todos, tengo este código y me da error de "incompatible pointer type" y no se por que (estoy usando el & para pasar la frase por referencia)

void encriptar(char *frase[], int longitud, int n)
 { int i,j,pos,encontrado;  
   char abc[27]="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
   for (i=1;i<=longitud;i++)
     {
        if (*frase != ' ')
          {
             j=1; encontrado=0;
             while (j<=27 && encontrado==0)
               {
                if (*frase == abc[j])
                    {
                      pos=j+n;
                      encontrado=1;
                      if (pos > 27)
                         pos = pos - 27;
                      *frase=abc[pos];
                    }
                 j++;
               }
           }
     }
     printf("Frase Codificada: %s n",frase);
       
 }
 
 main()
 { char frase[50];
   int i,n,longitud;
   printf("Indica frase a encriptar");
   gets(frase);
   longitud = strlen(frase);
   printf("Indica numero de caracteres hacia adelante");
   scanf("%d",&n);
   encriptar(&[/quote]frase,longitud,n);
   system("pause");
 }

alb

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Problemas como pasar char por referencia
« Respuesta #1 en: Martes 30 de Noviembre de 2010, 07:15 »
0
Holà,
Para pasa un pointer de una arrray, hubiera sido :
Código: C
  1. void encriptar(char (*frase)[50], int longitud, int n)
  2.  
Lueog es impide que lo utilizes asì : (*frase). Por ejemplo :
Código: C
  1. if ((*frase)[i] != ' ')
  2.  
Pero me parece que no sirve a nada de pasarlò como lo haces. Esto es suficiente :
Código: C
  1. void encriptar(char frase[50], int longitud, int n)
  2.  
llamando la funcion :
Código: C
  1. encriptar(frase,longitud,n);
  2.  


main no tiene forma correcta. Debrìa ser :
Código: C++
  1. int main(void)
  2.  
o
Código: C++
  1. int main(int argc, char *argv[])
  2.  


Una cadena de caracter se termina por ''. Asi abc no tiene 27 sino 28 caracteres. Però, lo mejor es dejar el compilador calcularlo solo :
Código: C
  1.    char abc[]="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  2.    const size_t abc_len = sizeof(abc)/sizeof(abc[1]);
  3.  
  4.  

Las bucles de vectores no se hacen de 1 hasta Length, pero empezan con 0. Asì que debria ser :
Código: C
  1. for (i=0;i<longitud;i++)
  2.  
y
Código: C
  1.          j=0; encontrado=0;
  2.          while (j<27 && encontrado==0)
  3.  
  4.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas como pasar char por referencia
« Respuesta #2 en: Martes 30 de Noviembre de 2010, 09:27 »
0
char[] es ya un puntero. No necesitas pasar char*[], que es un puntero de punteros a char. Si lo que quieres es modificar el array en la función y que se mantengan los cambios, con pasarlo como char[] te vale. Es decir:

Código: C
  1. void encriptar(char frase[], int longitud, int n)
  2.  
Con esto vas sobrado. Y ojo con los tamaños de los arrays como te indica alb.

Saludos

cyberday

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problemas como pasar char por referencia
« Respuesta #3 en: Miércoles 1 de Diciembre de 2010, 01:43 »
0
Muchas gracias!, resolví el problema y de paso entendí lo del pase de parámetro