Page 1 of 1

Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 12:37
by Chockosta
Bonjour !

En ce moment, comme vous le savez peut-être, je travaille sur mon projet nCraft.
Pour charger un fichier sauvegardé, j'ai besoin de récupérer des nombres dans des chaines de caractères.
J'ai donc bricolé cette fonction :
Code: Select all
int scanInt(char *str)
{
  int start=0;
  int i=0;
  int number=0;
 
  while(str[start]<48 || str[start]>57);
  {
    start++;
  }
  i=start;
  while(str[i]>=48 && str[i]<=57)
  {
    number*=10;
    number+=str[i]-48;
    i++;
  }
  return number;
}

Elle marche à merveille lorsque je l'utilise dans un programme en console sur mon ordi, mais lorsque je l'utilise sur l'émulateur, ça marche plus du tout.
Par exemple scanInt("4 ") renvoie 4 sur l'ordi et 0 sur l'émulateur.
Et, encore pire, scanInt(" 4 ") renvoie 4 sur l'ordi et donne une boucle infinie sur l'émulateur. (bon je devrais rajouter une protection pour éviter ça)

Pourtant '4' correspond au même nombre sur calculette et ordi...

Quelqu'un saurait-il pourquoi ça agit aussi bizarrement ?

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 12:40
by Levak
Table ascii probablement différente.
Utilise ' ' ou autres à la place des nombres.

exemple : blabla >= '0' && blabla <= '9'

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 15:15
by Chockosta
Ah oui, en effet, merci :)

Mais maintenant, c'est avec le système de fichiers que j'ai du mal...
fopen("save.tns","w+") et fopen("./save.tns","w+") créent tous deux le fichier dans "My documents" même si l'exécutable est dans un sous-dossier.
De plus, le fichier, un fois créé, ne peut être ni modifié ni supprimé jusqu'à ce que ndless soit désinstallé.

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 15:18
by Levak
fopen => chemin absolu (tu le récupères à la main depuis argv[0])
fichier locké => ça ressemble à un oubli de fclose

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 16:47
by Chockosta
Ok, je me suis débrouillé pour récupérer le bon chemin.
Mais je ne comprends pas pourquoi le fichier est lock : je n'ai que deux fopen dans mon code, toujours suivis de fclose...

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 16:53
by Levak
Chockosta wrote:Mais je ne comprends pas pourquoi le fichier est lock : je n'ai que deux fopen dans mon code, toujours suivis de fclose...

Et personnellement, j'ai toujours réussi à faire des fclose qui ne lockaient pas le fichier. Donc tu as un endroit dans ton code où le fopen ne fait pas de fclose, comme par exemple une condition d'erreur qui fait que tu ne penses pas à faire de fclose (je ne parle pas du cas où le FD est à NULL).

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 17:37
by Chockosta
Effectivement, j'avais fait un return avant le fclose...
Qu'est-ce que je suis bête :P

Merci pour ton aide, tout marche !

Re: Problème avec la manipulation de chaines de caractères

Unread postPosted: 06 Oct 2012, 18:33
by Lionel Debroux
Ajoute -Wunreachable-code aux flags du compilateur peut aider à limiter les occurrences de ce genre d'erreurs qu'on fait tous un jour ou l'autre :)