Me Ajude pfv

1. Me Ajude pfv

Felipe Coelho
felpsmak

(usa Outra)

Enviado em 06/09/2018 - 23:34h

Eu estou fazendo um trabalho para o curso onde e tenho que pedi um ip em decimal e passar ele pra binario, o problema é que eu separei tudinho pq preciso ler ate os os pontos que ficam entre os ips, ja testei muitas coisas mais o que ta dando errado é que na hora de imprimir, a segunda a terceira e a quarta parte do ip estao sendo repetidas pela primeira. o codigo ta abaixo.(ta incompleto o ipv6)

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

char ip[14];
void configipv4(char *ip)
{
printf("\n");
char a1[3],a2[3],a3[3],a4[3];
int i=0,conv;
for(i=0;i<3;i++)
{
a1[i]=ip[i];
}
conv=atoi(a1);
itoa(conv,a1,2);
printf("Endereco de IP em Binario:%s.", a1);
conv=0;
i=0;
for(i>=4;i<7;i++)
{
a2[i]=ip[i];
}
conv=atoi(a2);
itoa(conv,a2,2);
printf("%s.", a2);
conv=0;
i=0;
for(i>=8;i<11;i++)
{
a3[i]=ip[i];
}
conv=atoi(a3);
itoa(conv,a3,2);
printf("%s.", a3);
conv=0;
i=0;
for(i>=12;i<14;i++)
{
a4[i]=ip[i];
}
conv=atoi(a4);
itoa(conv,a4,2);
printf("%s", a4);
printf("\n");
system("pause");
}
void configipv6(char aa)
{

}
void IPv4(void)
{
system("cls");
char b[40];
printf("Informe o Endereco de IP:");
scanf("%s",ip);
configipv4(ip);
}
void IPv6(void)
{
system("cls");
char b[40];
printf("Informe o Endereco de IP:");
scanf("%s",ip);
configipv6(&ip);
}
main()
{
int op;
printf(" Bem Vindo!\n\n");
printf("Escolha uma opcao:\n\n 1-IPv4\n 2-IPv6\n\n Opcao:");
scanf("%d",&op);
if(op==1)
{
IPv4();
}
else if(op==2)
{
IPv6();
}
else printf("Digite uma opcao valida!!");
}



  


2. Re: Me Ajude pfv

MAURO BRITIVALDO
AnsiC

(usa Kali)

Enviado em 07/09/2018 - 09:54h

Olá tudo bem?

Em sistema 32 bits, um número inteiros convertido em base binária tem 32 caracteres.

A função itoa, converte o número entre bases, e salva em uma string (vetor de caracteres) o resultado da conversão e é necessário suprir uma necessidade muito importante/específica com relação a quantidade de memória destinada ao número convertido. Essa especificação depende do sistema de dados dados numéricos (16, 32 e outros bits). Então o calculo é muito simples. Considere string o nome de uma variável que é um vetor de memória destinado a receber a conversão de Decimais para Binários em um sistema 32 bits, daí o tamanho do vetor deve ser 32 + 1, se o sistema fosse 16 bits teríamos 16 + 1, logo para declaramos essa variável com segurança basta, por exemplo, a seguinte expressão escrita em C.
char dtob[sizeof (int) * 8  + 1];   
Essa expressão, com segurança, armazena a conversão de decimais para binários por meio da rotina itoa.

Exemplo
char dtob[sizeof (int) * 8 + 1];

itoa (255, dtob, 2);
printf ("%d para %s\n\n", 255, dtob);


O uso inadequado de uma função por falta em seus parâmetros tem resultados inesperados e incompreensíveis.
Att. AnsiC


3. Re: Me Ajude pfv

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/09/2018 - 15:15h

itoa() não é uma função padronizada. Ela existia em algumas implementações de compiladores C para MS-DOS (e talvez em um ou outro compilador para Windows), mas não faz parte do padrão do C e, portanto, não é encontrada em muitos compiladores de uso comum (por exemplo, os que vêm com distribuições de Linux e outros UNIXes).

Na minha opinião, se o propósito do exercício é você fazer uma conversão para binário, então é você que deve fazer essa conversão, não chamar uma função que a faz por você — ainda mais se tal função não for universalmente suportada.

Fora isso, seu programa tem vários pequenos erros, mas de consequências potencialmente graves. Os blocos em que você copia caracteres de ip para a1, a2 etc. estão todos errados: nenhum deles inclui o byte terminador da string, e do segundo em diante você usa índices inválidos para os arrays de destino (e ainda coloca uma expressão inútil na parte de inicialização dos comandos for).

Uma dica que eu sempre deixo aqui no fórum, e que pode ajudá-lo a pegar alguns erros bobos que você cometeu, é a seguinte: habilite o máximo de opções de diagnóstico do seu compilador (no caso do GCC, eu recomendo sempre as opções "-O2 -Wall -Werror -pedantic-errors"), e não desconsidere nenhuma mensagem de aviso que o compilador lhe mostrar.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts