commit initial, une fuite memoire detectee

master
Tristan MARTINEK 3 years ago
commit b3ca9337a2

@ -0,0 +1,34 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "convert_base.h"
int main(void)
{
char *nbr;
char *base_from;
char *base_to;
nbr = (char *)malloc(33 * sizeof(char));
base_from = (char *)malloc(50 * sizeof(char));
base_to = (char *)malloc(50 * sizeof(char));
if(!nbr || !base_from || !base_to)
{
write(2, "Erreur memoire, abandon", 24);
return 1;
}
printf("Rentrez votre nombre\n");
scanf("%32s", nbr);
fflush(stdin);
printf("Rentrez la base d'entrée de votre nombre\n");
scanf("%49s", base_from);
fflush(stdin);
printf("Rentrez la base de sortie désirée\n");
scanf("%49s", base_to);
fflush(stdin);
puts(convert_base(nbr, base_from, base_to));
free(nbr);
free(base_from);
free(base_to);
return 0;
}

@ -0,0 +1,89 @@
#include <stdlib.h>
#include "convert_base.h"
long decode(char *nbr, char *base_from)
{
int i;
long result;
i = 0;
result = 0;
while (nbr[i] == 32 || (nbr[i] >= 9 && nbr[i] <= 13)
|| nbr[i] == 43 || nbr[i] == 45)
i++;
while (nbr[i] != '\0' && is_base(nbr[i], base_from))
{
result = (result * check(base_from)) + unchar(nbr[i], base_from);
i++;
}
if (nbr [i] != '\0' && !is_base(nbr[i], base_from))
abort();
return (result);
}
void convert(long medium, char *base_to,
char *unestring, int *p_i)
{
long l_base;
l_base = check(base_to);
if (medium >= 0 && medium < l_base)
{
unestring[*p_i] = base_to[medium];
*p_i = *p_i + 1;
}
if (medium >= l_base)
{
convert(medium / l_base, base_to, unestring, p_i);
convert(medium % l_base, base_to, unestring, p_i);
}
unestring[*p_i] = '\0';
}
char *jonemar(char *cepafini, char *celafin, int i)
{
int j;
j = 0;
while (cepafini[j])
{
celafin[i] = cepafini[j];
i++;
j++;
}
celafin[i] = '\0';
return (celafin);
}
char *recode(long medium, char *base_to, int posi)
{
char cepafini[50];
char *celafin;
int i;
int *p_i;
i = 0;
p_i = &i;
convert(medium, base_to, cepafini, p_i);
if (posi < 0)
celafin = (char *)malloc(sizeof(char) * (*p_i + 3));
else
celafin = (char *)malloc(sizeof(char) * (*p_i + 2));
if (!(celafin))
return (0);
if (posi < 0 && medium != 0)
{
i = 1;
celafin[0] = '-';
}
else
i = 0;
return (jonemar(cepafini, celafin, i));
}
char *convert_base(char *nbr, char *base_from, char *base_to)
{
if (!(check(base_from)) || !(check(base_to)))
return (NULL);
return (recode(decode(nbr, base_from), base_to, start(nbr)));
}

@ -0,0 +1,9 @@
long decode(char *nbr, char *base_from);
void convert(long medium, char *base_to, char *unestring, int *p_i);
char *jonemar(char *cepafini, char *celafin, int i);
char *recode(long medium, char *base_to, int posi);
char *convert_base(char *nbr, char *base_from, char *base_to);
int check(char *base);
int is_base(char k, char *base);
int unchar(char k, char *base);
int start(char *str);

@ -0,0 +1,69 @@
int check(char *base)
{
int i;
int j;
i = 0;
while (base[i] != '\0')
{
j = i + 1;
while (base[j] != '\0')
{
if (base[j] == base[i])
return (0);
j++;
}
if (base[i] == 43 || base[i] == 45)
return (0);
i++;
}
if (i < 2)
return (0);
return (i);
}
int is_base(char k, char *base)
{
int i;
i = 0;
while (base[i])
{
if (k == base[i])
return (1);
i++;
}
return (0);
}
int unchar(char k, char *base)
{
int i;
i = 0;
while (base[i])
{
if (k == base[i])
return (i);
i++;
}
return (0);
}
int start(char *str)
{
int posi;
int i;
i = 0;
posi = 1;
while (str[i] == 32 || (str[i] >= 9 && str[i] <= 13))
i++;
while (str[i] == '-' || str[i] == '+')
{
if (str[i] == '-')
posi = posi * -1;
i++;
}
return (posi);
}
Loading…
Cancel
Save