Bonjour à tous,
j'ai créé un bout de code pour récupérer le contenu d'une variable (CHN) de 15 caractères sur la calculatrice.
FILE *f = fopen (nomchaine, "r");
fgets(x,15,f);
fclose (f);
DrawStr(10,10,x,A_NORMAL);
Cela marche très bien dans VTI avec un AMS 2.04
Par contre j'ai une erreur "accès illicite à la mémoire" quand j'execute ce programme sur ma babasse qui a un AMS 2.08.
Merci de votre aide
tout d'abord, commence, après ton fopen, par véirifier si le fichier a bien été ouvert
(autrement dit, si la valeur retournée par fopen est différente de NULL)
ensuite, au niveau du format des fichiers STR sur Ti, je me demande s'ils ne commencent pas par un 0, et finissent par un 0.
auquel cas, il faudrait que tu sautes le 0 de départ.
après vérification, il semblerait que, effectivement, un fichier STR commence par un octet valant 0, puis ensuite, la chaîne de caractères, terminée par un 0 comme le veut la norme C. Il te faut donc, je pense, sauter le premier caractère du fichier.
En fait là tu ouvres le fichier en mode texte (mode "r"), mais le mode texte ne marche qu'avec des "vrais" fichiers texte (TEXT). Pour utiliser d'autres types de données, comme des chaînes de caractères, il faut passer par le mode binaire ("rb"). Une fois que tu l'as ouvert comme ça, effectivement comme le dit squale il faut zapper le premier caractère qui sera tjs un 0 (sinon tu auras une chaîne vide), puis tu peux lire ta chaîne.
Enfin fais attention, si le contenu de la chaîne fait plus de 15 caractères, ton prog risque de planter (chaîne hyper longue), donc pense à rajouter un truc comme x[15]=0 juste après le fgets (si tu as déclaré un buffer de 16 octets)
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
tu déclares ds pointeurs noms et x, mais tu ne leur fait correspondre aucun espace mémoire.
donc, quand tu écris vers ces pointeurs (avec le strcopy pour noms, et avec le fgets pour x), tu écris n'importe où en mémoire
et donc, tu corrompt de la mémoire => la calculatrice va devenir instable
donc ça plantera à un moment ou à un autre
ce que tu peux faire, plutot que de déclarer tes pointeurs et de ne jamais dire sur quoi ils pointent, c'est de déclarer des tableaux de chars, un peu comme ça :
char noms[18];
(18 : 8+8 pour les noms de fichier et de répertoire, +1 pour l'antislash entre les deux, +1 pour le 0 de fin de chaine ; à toi d'adapter la taille si tu veux stocker autre chose)
Ca marche déjà mieux, mais j'ai un problème avec le fgets.
J'ai déclaré un tableau de char pour le x, mais j'arrive pas à mettre le contenu de ma variable STR dedans.
(j'utilise le même code que plus haut).