Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Blaster en 14 Octubre 2012, 01:40 am



Título: Warning al compilar un programa [Solucionado]
Publicado por: Blaster en 14 Octubre 2012, 01:40 am
Bueno este programita hace lo siguiente: cambia cada letra de la palabra usando abecedario inverso (corrimiento a la derecha)
Cambia 'a' por 'z' - 'y' por 'b' y sucesivamente; el problema es que cuando lo compilo
me lanza este warning:

Código:
[Warning] NULL used in arithmetic 

Alguien sabe por pasa esto y como puedo solucionarlo :huh:
les dejo el code:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. char *palabra=(char*)malloc(sizeof(char)*64);
  7. char *nuevo=(char*)malloc(sizeof(char)*64);
  8. char *start= nuevo;
  9. printf("Original: ");
  10. gets(palabra);
  11. while(*palabra!= '\0'){
  12.            if (*palabra==32 )
  13.                *nuevo++= *palabra++;
  14.            else
  15.                *nuevo++= 219- *palabra++;
  16.                }
  17.    *nuevo++='\0';
  18.    printf(" Cifrado: %s \n", start);
  19. return 0;
  20. }

Codigo mejorado  ;D


Título: Re: Warning al compilar un encriptador
Publicado por: rir3760 en 14 Octubre 2012, 03:07 am
El mensaje de advertencia se genera por la linea:
Código
  1. }while (caract!=NULL);
Ya que (usualmente) NULL es de tipo "void *" y (en tu caso) estarias comparando un entero con un puntero.

Para que no se genere el mensaje cambia esa linea a:
Código
  1. }while (caract != '\0');

Un saludo


Título: Re: Warning al compilar un encriptador
Publicado por: leosansan en 14 Octubre 2012, 14:12 pm
Usando arrays estáticos te queda más "light":
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int i;
  6. char frase[64],nuevo[64];
  7.        printf("Original: ");
  8. gets(frase);
  9.        for ( i=0;frase [i]!='\0';i++)
  10.             nuevo[i]=219-frase [i];
  11.        nuevo[i]='\0';
  12.        printf(" Cifrado: %s", nuevo);
  13. return 0;
  14. }


Título: Re: Warning al compilar un encriptador
Publicado por: Blaster en 14 Octubre 2012, 14:39 pm
Gracias rir3760 por la ayuda ya corregi el code  ;)

Este code lo hize solo pa practicar con malloc ; definitivamente
quedaria mas bonito usando arrays estaticos

un saludo!


Título: Re: Warning al compilar un encriptador
Publicado por: leosansan en 14 Octubre 2012, 18:23 pm
Este code lo hize solo pa practicar con malloc ; definitivamente
quedaria mas bonito usando arrays estaticos
Ya me parecía a mí. Pero creo que puedes prescindir de "char caract;":
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. char *frase=(char*)malloc(sizeof(char)*64);
  7. char *nuevo=(char*)malloc(sizeof(char)*64);
  8. char *start= nuevo;
  9. printf("Original: ");
  10. gets(frase);
  11.    printf(" Cifrado: ");
  12. for (;*frase!= '\0';)
  13.        {
  14.            if (*frase==32 )
  15.                *nuevo++= *frase++;
  16.            else
  17.                *nuevo++= 219- *frase++;
  18.        }
  19.    *nuevo++='\0';
  20.    printf(" Cifrado: %s \n", start);
  21. return 0;
  22. }
Un saludo!


Título: Re: Warning al compilar un encriptador
Publicado por: Blaster en 14 Octubre 2012, 18:58 pm
Si efectivamente esta demas, vi que en el code de arriba  agregaste un:
Código:
printf(" Cifrado: ");

Creo que esta demas, me llamo la atencion la forma que implementaste
el for nunca la habia visto, es como la implementacion del while en el for

Un saludo  ;)