SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: cyberday en Martes 30 de Noviembre de 2010, 05:35

Título: Problemas como pasar char por referencia
Publicado por: cyberday en Martes 30 de Noviembre de 2010, 05:35
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");
 }
Título: Re: Problemas como pasar char por referencia
Publicado por: alb en Martes 30 de Noviembre de 2010, 07:15
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.  
Título: Re: Problemas como pasar char por referencia
Publicado por: m0skit0 en Martes 30 de Noviembre de 2010, 09:27
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
Título: Re: Problemas como pasar char por referencia
Publicado por: cyberday en Miércoles 1 de Diciembre de 2010, 01:43
Muchas gracias!, resolví el problema y de paso entendí lo del pase de parámetro