Warning al compilar un programa [Solucionado]

Iniciado por Blaster, 14 Octubre 2012, 01:40 AM

0 Miembros y 1 Visitante están viendo este tema.

Blaster

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:

[Warning] NULL used in arithmetic

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

#include <stdlib.h>
#include <stdio.h>

int main()
{
char *palabra=(char*)malloc(sizeof(char)*64);
char *nuevo=(char*)malloc(sizeof(char)*64);
char *start= nuevo;
printf("Original: ");
gets(palabra);
while(*palabra!= '\0'){
           if (*palabra==32 )
               *nuevo++= *palabra++;
           else
               *nuevo++= 219- *palabra++;
               }
   *nuevo++='\0';
   printf(" Cifrado: %s \n", start);
return 0;
}


Codigo mejorado  ;D

rir3760

El mensaje de advertencia se genera por la linea:
}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:
}while (caract != '\0');

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

Usando arrays estáticos te queda más "light":
Código (cpp) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i;
char frase[64],nuevo[64];
        printf("Original: ");
gets(frase);
        for ( i=0;frase [i]!='\0';i++)
             nuevo[i]=219-frase [i];
        nuevo[i]='\0';
        printf(" Cifrado: %s", nuevo);
return 0;
}

Blaster

#3
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!

leosansan

Cita de: Neo_System en 14 Octubre 2012, 14:39 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 (cpp) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>

int main()
{
char *frase=(char*)malloc(sizeof(char)*64);
char *nuevo=(char*)malloc(sizeof(char)*64);
char *start= nuevo;
printf("Original: ");
gets(frase);
    printf(" Cifrado: ");
for (;*frase!= '\0';)
        {
            if (*frase==32 )
                *nuevo++= *frase++;
            else
                *nuevo++= 219- *frase++;
        }
    *nuevo++='\0';
    printf(" Cifrado: %s \n", start);
return 0;
}

Un saludo!

Blaster

#5
Si efectivamente esta demas, vi que en el code de arriba  agregaste un:
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  ;)