Code C

omar_einstein -  
 omar_einstein -
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   Statut Membre Dernière intervention   663
 
tu déclares assez d'espace seulement pour un seul caractère à chaque fois dans toutes tes chaines.
0
omar_einstein
 
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   Statut Membre Dernière intervention   663
 
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
 
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
 
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
 
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