Forum Clubic

Probleme avec un nom de fichier - en C

Salut, jai un souci avec mon programme. Jai une fonction qui me renvoie le mois et l’annee en cours et je mets ces variable en tant que nom de fichier :

char *nomdufichier()
{
	char *nomfichier=NULL;
	int m;
	int a;


	m=chopeMois();
	a=chopeAnnee();

	//printf("Mois est %d",m);
	//printf("Annee est %d",a);
	
	
	a=a-100;//on veut que le dernier chiffre donc on retire 100;
	a=a+48;//on ajoute 48 pour 'convertir' (sinon affiche smiley)

	if(m<10)
	{
  nomfichier[0]='0';
  
	}
	else
	{
  nomfichier[0]='1';
	}
	m=m-10;//on prend que le dernier chiffre donc on soustrait de 10
	m=m+48;//on ajoute 48 pour 'convertir' (sinon affiche smiley)
	nomfichier[1]=m;
	nomfichier[2]='-';
	nomfichier[3]='2';
	nomfichier[4]='0';
	nomfichier[5]='0';
	nomfichier[6]=a;
	nomfichier[7]='.';
	nomfichier[8]='t';
	nomfichier[9]='x';
	nomfichier[10]='t';
	nomfichier[11]='\0';//pour dire qu'on est bien à la fin 



	//printf("Le nom du fichier est %s",nomfichier);

	return nomfichier;
	
}

cette fonction marche bien a la fin jai bien un nom de fichier du style 12-2006.txt

Mais dans une autre fonction, quand je veux recuperer ce nom pour créer mon fichier ça mer**. Impossible de resoudre, je lance l’application et quand jarrive a la fonction ça plante et je fois fermer.

void ajouteeleve()
{


char n[LG]="";
system("cls");
n[LG]=nomdufichier();
//strcpy(n,nomdufichier());
printf("AJOUT D'UNE FICHE ELEVE\n\n");


printf("Le nom du fichier est %s",n);

jai beau testé ça marche pas. Comment faire svp ?
Merci d’avance de votre aide

Oula, ça fait longtemps que je n’ai pas fait de C…

 char *nomfichier=NULL;

Et après, tu assignes directement des valeurs dans ton tableau…

Il ne manquerait pas quelque chose comme

nomfichier = (char*)malloc(12 * sizeof(char));

ou un truc du genre…

Sinon pour isoler le dernier chiffre du mois ou de l’année, un petit modulo 10…

sinon pour convertir d’entier vers char* il y a itoa( ) (pour int to ascii)
fonctionne aussi a l’envers atoi()

nomfichier a une taille fixe alors tu peux le declarer
char nomfichier[12];

char n[LG]=""; -> on dirait du Java

n[LG]=nomdufichier(); -> du grand n’importe quoi
utilise strcpy(n,nomdufichier());

et entre nous, ça irait pas plus vite comme ça :

char buffer[1024];
snprintf(buffer, 1024, "m%sa%s.txt", chopeMois(), chopeAnnee());
puts(buffer);

?

bon merci pour vos reponses, jai utilisé malloc. Mais je comprends pas pourquoi ça marchait pas avant

Parce qu’au début nomfichier est un pointeur nul.
Donc quand tu fais nomfichier[0] = ‘a’, ton programme écrit l’octet ‘a’ à l’adresse 0x00000000 qui est forcément invalide.
Le C c’est pas magique si tu veux utiliser de la mémoire faut la réclamer ! avec malloc. Quand tu as plus besoin tu passe à free ce que malloc a renvoyé histoire de libérer la mémoire et d’éviter les fuites.