Code C

Fermé
omar_einstein - 12 févr. 2010 à 22:25
 omar_einstein - 13 févr. 2010 à 01:42
Bonjour,

Si jamais qqu peut m'indiquer le problème dans ce code je serais très reconnaissant.

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<direct.h>
#include<string.h>


void Creation_Dossier_Data()
{
mkdir("c:\\data\\");
}

char * Creation_Base_Donnees(char * Nom_base)
{
char *Ma_base, * char_tmp;
Ma_base = (char *)malloc(sizeof(char));
char_tmp = (char *)malloc(sizeof(char));
char_tmp = strcpy(char_tmp, "c:\\data\\");
Ma_base = strcat(char_tmp, Nom_base);
mkdir(Ma_base);
return ((char *)Ma_base);
}

void Creation_des_Tables(int Nbr_tables, char * Nom_base)
{
char * Ma_base;
FILE * pt_fich;
char * Nom_fich;
char * Ma_table;
int indice;

Ma_base = (char *)malloc(sizeof(char));
Ma_table = (char *)malloc(sizeof(char));
Nom_fich = (char *)malloc(sizeof(char));
pt_fich = (FILE *)malloc(sizeof(FILE));

Ma_base = strcat(Nom_base, "\\");

for(indice = 0; indice < Nbr_tables; indice++)
{
printf("\nEntrer le nom de la table num. %d\t", indice+1);
scanf("%s", Nom_fich);
Ma_table = strcat(Ma_base, Nom_fich);
pt_fich = fopen(Ma_table, "w");
fclose(pt_fich);
}
}


main()
{
char * Ma_base;
int nbr;
Ma_base = (char *)malloc(sizeof(char));

Creation_Dossier_Data();
printf("\nEntrer le nom de votre base de donnees:\t");
scanf("%s", Ma_base);

Ma_base = Creation_Base_Donnees(Ma_base);

printf("\nEntrer le nombre des tables de votre base de donnees:\t");
scanf("%d", &nbr);

--> Creation_des_Tables(nbr, Ma_base);

getch();
return 0;
}

Merci à l'avance
A voir également:

6 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
12 févr. 2010 à 22:32
tu déclares assez d'espace seulement pour un seul caractère à chaque fois dans toutes tes chaines.
0
omar_einstein
12 févr. 2010 à 22:37
Bonsoir,
Merci d'abord pour votre réponse.
Les déclarations sont faites pour lire les noms des bases et des tables. Je que le problème ne se constitue pas là !!? je crois que le problème est au niveau des \ (antislash).
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
12 févr. 2010 à 23:05
Nom_fich = (char *)malloc(sizeof(char));

c'est un comme si tu faisais (statiquement)

char Nom_fich[1];

Il n'y a de place que pour un caractère. Donc lorsque tu fais
printf("\nEntrer le nom de la table num. %d\t", indice+1);
scanf("%s", Nom_fich);

ça pose un problème...

La même chose pour de nombreux endroits dans le code.
0
omar_einstein
12 févr. 2010 à 23:28
Oui je crois c ça le problème. Je vais l'essayer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
omar_einstein
13 févr. 2010 à 00:05
C'est bon ça marche mais il reste un tout petit problème c'est au niveau de la boucle for précisément lors de la création des fichiers (tables). Le nom du fichier suivant est concaténé avec ceux précèdent. Il faut à chaque fois initialiser le pointeur Ma_base. Avez-vous une idée !?
0
omar_einstein
13 févr. 2010 à 01:42
Bonsoir,

Voila le code en intégrité comme ça ça marche très bien !!!?

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<direct.h>
#include<string.h>


void Creation_Dossier_Data()
{
mkdir("c:\\data\\");
}

char * Creation_Base_Donnees(char * Nom_base)
{
char *Ma_base, * char_tmp;
Ma_base = (char *)malloc(sizeof(char)*20);
char_tmp = (char *)malloc(sizeof(char)*20);
char_tmp = strcpy(char_tmp, "c:\\data\\");
Ma_base = strcat(char_tmp, Nom_base);
mkdir(Ma_base);
return ((char *)Ma_base);
}

void Creation_des_Tables(int Nbr_tables, char * Nom_base)
{
char Ma_base[20], Ma_base_tmp[20];
FILE * pt_fich;
char * Nom_fich;
char * Ma_table;
int indice;

Ma_table = (char *)malloc(sizeof(char)*20);
Nom_fich = (char *)malloc(sizeof(char)*20);

pt_fich = (FILE *)malloc(sizeof(FILE)*5);

strcpy(Ma_base, Nom_base);
strcat(Ma_base, "\\");
strcpy(Ma_base_tmp, Ma_base);

for(indice = 0; indice < Nbr_tables; indice++)
{
printf("\nEntrer le nom de la table num. %d\t", indice+1);
scanf("%s", Nom_fich);
Ma_table = strcat(Ma_base_tmp, Nom_fich);
pt_fich = fopen(Ma_table, "w");
strcpy(Ma_base_tmp, Ma_base);
fclose(pt_fich);
}
}


main()
{
char * Ma_base;
int nbr;
Ma_base = (char *)malloc(sizeof(char)*20);

Creation_Dossier_Data();
printf("\nEntrer le nom de votre base de donnees:\t");
scanf("%s", Ma_base);

Ma_base = Creation_Base_Donnees(Ma_base);

printf("\nEntrer le nombre des tables de votre base de donnees:\t");
scanf("%d", &nbr);

Creation_des_Tables(nbr, Ma_base);

getch();
return 0;
}
0