concatener chaine + entier

concatener chaine + entier - C - Programmation

Marsh Posté le 20-03-2005 à 23:15:12    

Bonjour,  
voila j'ai plusieurs fichiers dans un repertoire du type:
nom_1, nom_2, nom_3, etc.., nom_n
 
Or j'aimerais dans une fonction tester quelle est la valeur max de 'n' dans le nom_n pour pouvoir creer des fichiers à la suite (nom_n+1)
 
j'ai :
int

Code :
  1. get_max (char *fichier)
  2. {
  3. int i = 0; // compteur local
  4. //FILE *fp = fopen (fichier, "r" );
  5. }


Et je vois pas comment faire la boucle selon 'i', et tester si 'nom_i' existe?
 
Merci d'avance pour vos reponses

Reply

Marsh Posté le 20-03-2005 à 23:15:12   

Reply

Marsh Posté le 20-03-2005 à 23:17:18    

avec sprintf ?


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-03-2005 à 23:23:59    

ba je sais pas, avec ce qu'il est possible, en eviter des malloc

Reply

Marsh Posté le 20-03-2005 à 23:26:03    

man sprintf


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-03-2005 à 23:29:44    

oui je sais, mais désolé, je suis pas tres douée, et j'ai du mal pour faire la concatenation du nom du fichier avec le compteur 'i'.
 
Tu pourrais m'aiguiller ?

Reply

Marsh Posté le 20-03-2005 à 23:41:37    

sprint(ficelle,"nom_%d",i);
 
c'est si dur que ca ?


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-03-2005 à 23:44:32    

ah oui d'accord mais je peux faire un fopen derriere ca ?

Reply

Marsh Posté le 20-03-2005 à 23:47:47    

qu'est ce qui t'en empeche ?


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-03-2005 à 23:48:58    

en fait je recoit donc le nom du fichier en argument de la fonction, et doit tester si le fichier de nom "nom_i" existe (boucle jusqu'à valeur max de 'i')

Reply

Marsh Posté le 21-03-2005 à 00:00:57    

merci beaucoup, voila le code (je sais ca vous parait tres facile mais bon)...
 

Code :
  1. int
  2. detect_max(char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp = fopen (tmpfile, "r" );
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  i++;
  11.  sprintf(tmpfile,"%s_%d",fichier,i);
  12. }
  13. printf("last fichier :%s",tmpfile);
  14. }


Message édité par myeve le 21-03-2005 à 00:01:14
Reply

Marsh Posté le 21-03-2005 à 00:00:57   

Reply

Marsh Posté le 21-03-2005 à 00:03:12    

euh faudrait peut etre penser a fermer tes fichiers non ?


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 21-03-2005 à 00:16:17    

ah vi ok suis je bete, voila :
 

Code :
  1. char *
  2. get_max (char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp;
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  fclose(fp);
  11.  i++;
  12.  sprintf(tmpfile,"%s_%d",fichier,i);
  13. }
  14. return tmpfile;
  15. }


 
comme ca c mieux?


Message édité par myeve le 21-03-2005 à 00:17:09
Reply

Marsh Posté le 21-03-2005 à 00:18:02    

non !
le retour de ta fonction est pas bonne :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 21-03-2005 à 00:24:31    

ah oui mais j'aimerais bien retourner le nom du fichier, il faut quoi ? 'char' tout court ?

Reply

Marsh Posté le 21-03-2005 à 08:51:07    

myeve a écrit :


Code :
  1. char *
  2. get_max (char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp;
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  fclose(fp);
  11.  i++;
  12.  sprintf(tmpfile,"%s_%d",fichier,i);
  13. }
  14. return tmpfile;
  15. }


 
comme ca c mieux?


 
Oui, mais il y a un bug potentiel. Bien qu'il soit techniquement possible de retourner l'adresse d'une variable locale, l'utilisation de celle-ci dans la fonction appelante invoque un copportement indéfini (normal, car cette adresse n'est plus valide). Il faut donc faire autrement. Il y a trois solutions connues.

  • Retourner l'adresse d'un variable statique (peu recommandé)
  • Retourner l'adresse d'un variable dynamique (pratique, mais attention à la libération du bloc)
  • Passer l'adresse d'une variable et permettre sa modfication. Si c'est un tableau, il est bon de passer aussi sa taille (en nombres d'éléments).


Mais dans ton cas, tu ne voulais pas juste retourner la valeur du compteur ?


Message édité par Emmanuel Delahaye le 21-03-2005 à 13:17:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 11:51:30    

si merci beaucoup, c'estce que j'ai fait ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed