Bonjour, voilà pour mes étude j'ai un projet d'informatique à faire dans lequel une des fonctions est de trier un fichier texte contenant le nom le prénom le numéro de portable ainsi que l'email de personnes. il y a une personne par ligne. Mais le fichier dont on connait le nom n'est pas forcément trier à la base. D'où ma fonction. Voilà j'ai écrit ce code mais mon compilateur m'indique trois erreurs concernant les codes en gras.
Ces erreurs sont toutes les trois identiques:
error C2664: 'strcpy' : cannot convert parameter 2 from 'char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast.
Donc j'aimerais savoir ce qu'il faut faire pour les corriger et pourquoi si possible, puis si il y a d'autres erreurs...(en particulier pour l'affectation des pointeurs si les allocations mémoire marchent
voici le code:
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct contact
{
char nom[50];
char prenom[50]; //définition de la structure d'une personne
int portable;
char email[50];
struct contact *suivant;
}contact;
typedef contact* ptr_contact; //définition d'un type correspondant à un pointeur sur contact
void charger(ptr_contact);
void ajout(ptr_contact ,char[50] ,char[50] ,int ,char[50]); //déclaration de mes fonctions annexes
void trier(ptr_contact);
void remplir(char [13],ptr_contact);
void liberer(ptr_contact);
void main ()
{
ptr_contact liste=NULL;
char texte[]="contacts.txt"; // fonction principale
charger(liste);
trier(liste);
remplir(texte,liste);
}
void charger(ptr_contact liste) //Elle est censée copier le fichier dans une liste chainée de structures
{
FILE* fichier=NULL;
fichier=fopen("contact.txt","r");
char NOM[50],PRENOM[50],EMAIL[50];
int PORTABLE;
if(!fichier)
printf("erreur"); //lorsque l'ouverture du fichier echoue
else
{
while(fscanf(fichier,"%s %s %d %s\n",NOM, PRENOM, &PORTABLE, EMAIL))
{ //effectuer la boucle tant que l'on est pas à la fin du fichier
ajout(liste,NOM,PRENOM,PORTABLE,EMAIL);
}
}
fclose(fichier);
}
void ajout(ptr_contact liste, char NOM, char PRENOM, int PORTABLE, char EMAIL)
{
ptr_contact pcourant;
pcourant=(ptr_contact) malloc(sizeof(contact)); //la fonction crée un pointeur sur une structure vide
strcpy(pcourant->nom,NOM); //qu'il remplit à l'aide des données transmises
strcpy(pcourant->prenom,PRENOM);
pcourant->portable=PORTABLE;
strcpy(pcourant->email,EMAIL);
pcourant->suivant=liste;
liste=pcourant;
}
void trier(ptr_contact liste) //cette fonction compare l'ordre alphabétique des contacts et les
//déplace si ce dernier n'est pas bon
ptr_contact pcourant;
{
contact tampon;
if(liste)
{
for(pcourant=liste->suivant;pcourant;pcourant=pcourant->suivant)
{
if(stricmp(liste->nom,pcourant->nom)>0)
{
strcpy(tampon.nom,liste->nom);
strcpy(tampon.prenom,liste->prenom);
tampon.portable=liste->portable;
strcpy(tampon.email,liste->email);
strcpy(liste->nom,pcourant->nom);
strcpy(liste->prenom,pcourant->prenom);
liste->portable=pcourant->portable;
strcpy(liste->email,pcourant->email);
strcpy(pcourant->nom,tampon.nom);
strcpy(pcourant->prenom,tampon.prenom);
pcourant->portable=tampon.portable;
strcpy(pcourant->email,tampon.email);
}
trier(liste->suivant);
}
}
}
void remplir(char texte, ptr_contact liste)
{
FILE* fichier;
fichier=fopen("contacts.txt", "w+"); //cette fonction elle réecris le fichier à partir de la liste chainée qui est
ptr_contact pcourant=liste; //dans l'ordre alphabétique
while(liste)
{
fprintf( fichier,"%s %s %d %s\n",liste->nom, liste->prenom, liste->portable, liste->email);
liste=liste->suivant;
}
fclose(fichier);
liberer(pcourant);
}
void liberer(ptr_contact liste)
{
ptr_contact tampon, pcourant;
for(pcourant=liste;pcourant;)
{
tampon=pcourant->suivant;
free(pcourant); //Enfin cette fonction efface la liste chainée
pcourant=tampon;
}
}
Merci
