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
Ir a la versión completa