Programación General > C/C++

 Problemas como pasar char por referencia

(1/1)

cyberday:
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:
Holà,
Para pasa un pointer de una arrray, hubiera sido :

--- Código: C ---void encriptar(char (*frase)[50], int longitud, int n) Lueog es impide que lo utilizes asì : (*frase). Por ejemplo :

--- Código: C ---if ((*frase)[i] != ' ') Pero me parece que no sirve a nada de pasarlò como lo haces. Esto es suficiente :

--- Código: C ---void encriptar(char frase[50], int longitud, int n) llamando la funcion :

--- Código: C ---encriptar(frase,longitud,n); 

main no tiene forma correcta. Debrìa ser :

--- Código: C++ ---int main(void) o

--- Código: C++ ---int main(int argc, char *argv[]) 

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 ---   char abc[]="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";   const size_t abc_len = sizeof(abc)/sizeof(abc[1]);  
Las bucles de vectores no se hacen de 1 hasta Length, pero empezan con 0. Asì que debria ser :

--- Código: C ---for (i=0;i<longitud;i++) y

--- Código: C ---         j=0; encontrado=0;         while (j<27 && encontrado==0)  

m0skit0:
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 ---void encriptar(char frase[], int longitud, int n) Con esto vas sobrado. Y ojo con los tamaños de los arrays como te indica alb.

Saludos

cyberday:
Muchas gracias!, resolví el problema y de paso entendí lo del pase de parámetro

Navegación

[0] Índice de Mensajes

Ir a la versión completa