img
@_ö
(07:09)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo, Lionel Debroux + 55 inconnu(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « - 1/3 - Suivant » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (78r) » alternative à fgets
./Post de départ - alternative à fgets
19.10.2009 - 13
17:23  shadow_C - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Bonjour,
J'aimerais protéger mon programme des overflow, notamment lors de la saisie de chaîne par l'utilisateur.
J'ai donc, coder ma petite fonction de saisie utilisant fgets.
fgets(str, sizeof str, stdin);
Erreur de compilation #confus# , une petite recherche m'a permis de me rendre compte que stdin sur une TI, ca n'existe pas.

Y-a-t-il moyen d'utiliser fgets, ou alors existe-t-il une autre méthode pour protéger des overflow ?

Merci d'avance



./Publicité AdSense
./1
10.06.2001 - 32547
17:41  Kevin Kofler - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié



Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./2
19.10.2009 - 13
17:53  shadow_C - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Merci, exactement ce qu'il me fallait.



./3
19.10.2009 - 13
18:15  shadow_C - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Je sais pas ce qui ne vas pas, mais getsn ne fonctionne pas.
Si je saisie une chaîne, et que je valide par enter, ca ne met pas fin à la saisie, ca saute simplement une ligne.

Sinon j'ai trouvé une autre méthode dans la FAQ avec ngetchx().



./4
10.06.2001 - 32547
18:21  Kevin Kofler - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Tu utilises quoi comme compilateur? Et quelle version?


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./5
19.10.2009 - 13
18:34  shadow_C - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

J'utilise l'IDE tigcc v 0.95 avec VTI.



./6
19.10.2009 - 13
18:47  shadow_C - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

J'ai trouvé, enfaite c'est pas getsn qui allait pas, c'est ce qui suivait, je vidais le flux stdin avec getchar #roll#

Le seul problème est qu'avec getsn, je peux saisir max 3 caractère (malgré la taille de size qui est à 16).
Je saisie 3 caractères, puis j'ai beau appuyer sur une touche, rien ne s'ajoute après ces 3 caractères. Je peux juste faire enter pour valider ma saisie.



./7
10.06.2001 - 32547
19:33  Kevin Kofler - Posté : 02-11-2009  M   Signaler un abus Signaler un contenu inapproprié

La 0.95 est obsolète, essaie la 0.96 Beta 8.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./8
28.10.2001 - 7330
21:11  Lionel Debroux - Posté : 02-11-2009  M  Online  Signaler un abus Signaler un contenu inapproprié

Bien que l'upgrade depuis TIGCC 0.95 vers TIGCC 0.96 Beta 8 (ou plus récent) soit plutôt une bonne idée, il n'est pas garanti que cela change le comportement de son programme: ni getsn.s, ni fputchar.s, ni fgetchar.s, ni fgetchrc.s n'ont été modifiés depuis que le repository CVS de TIGCC existe (c'est à dire, depuis une date légèrement postérieure à TIGCC 0.95, mais antérieure à TIGCC 0.96 Beta 1).


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./9
10.06.2001 - 21295
14:03  Thibaut - Posté : 05-11-2009  M   Signaler un abus Signaler un contenu inapproprié

J'ai peut-être une solution qui pourrait te convenir %)
Récupère ce truc : http://ti-fr.com/?co=1&n=264
Prends les fichiers likeonpc.h et errno.h, et copie-les dans C:/Program Files/TIGCC/Include/C.
En faisant #include <likeonpc.h> Tu auras un getsn avec curseur comme sur PC, qui à priori fonctionne très bien. Note importante : la fonction principale de ton programme devra s'appeler main et non plus_main.
Si tu optes pour GTC, tu peux copier tous les fichiers et faire une inclusion plus standard qui sera #include <stdio.h>


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./10
10.06.2001 - 32547
18:46  Kevin Kofler - Posté : 05-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Je déconseille fortement l'utilisation de ces hacks qui grossiront ton programme, il vaut mieux apprendre la programmation sur TI directement. Et puis, Thibaut, je ne comprends pas l'intérêt de ton histoire de curseur dans getsn.

S'il y a un problème avec notre fonction getsn, il faudra la corriger, pas la remplacer avec une autre implémentation qui pourrait avoir d'autres bogues.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./11
28.10.2001 - 7330
19:30  Lionel Debroux - Posté : 05-11-2009  M  Online  Signaler un abus Signaler un contenu inapproprié

L'exemple
char buffer[50]; 
int a, b; 
clrscr (); 
puts ("A = "); 
a = atoi (getsn (buffer, 50)); 
puts ("B = "); 
b = atoi (getsn (buffer, 50)); 
printf ("%d + %d = %d", a, b, a+b);

donné dans la doc de getsn fonctionne pour moi (GCC4TI SVN HEAD).
Shadow_C, poste-nous STP ton code ;)


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./12
10.06.2001 - 32547
19:50  Kevin Kofler - Posté : 05-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Un truc qui me vient: essaierais-tu d'utiliser sizeof sur un tableau alloué dynamiquement? Ce n'est pas possible, ça donnera toujours la taille d'un pointeur (4 octets), donc forcément il n'acceptera que 3 caractères (4 - 1 pour le '\0'). Passe directement la taille que tu as allouée, pas sizeof(ptr).


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./13
10.06.2001 - 21295
20:38  Thibaut - Posté : 05-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Kevin Kofler (./10) :
Je déconseille fortement l'utilisation de ces hacks qui grossiront ton programme
Aucun hack, simplement une réimplémentation. Quant à la grosseur, il peut rien en avoir à faire, d'autant plus que le gets de TIGCC est tellement pourri que tout programme demandant une saisie à l'utilisateur embarque sa propre redéfinition.

Kevin Kofler (./10) :
je ne comprends pas l'intérêt de ton histoire de curseur dans getsn.
Regarde plus attentivement le gif animé, tu devrais comprendre facilement.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./14
10.06.2001 - 32547
23:36  Kevin Kofler - Posté : 05-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Ta bidouille de _main est un hack, faire ça proprement demande beaucoup plus de travail, probablement aussi au niveau du linker.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./15
10.06.2001 - 21295
09:04  Thibaut - Posté : 06-11-2009  M   Signaler un abus Signaler un contenu inapproprié

A toi de jouer !


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./16
18.06.2001 - 20189
10:38  Folco - Posté : 06-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Kevin Kofler (./14) :
Ta bidouille de _main est un hack, faire ça proprement demande beaucoup plus de travail, probablement aussi au niveau du linker.

Comme beaucoup de ce qui est comme de démarrage dans TIGCCLIB, t'es drôle à lire :D


./17
10.06.2001 - 32547
15:56  Kevin Kofler - Posté : 06-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Justement, ce code de démarrage est l'exemple de comment faire les choses proprement. :)


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./18
19.10.2009 - 13
22:47  shadow_C - Posté : 06-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Un truc qui me vient: essaierais-tu d'utiliser sizeof sur un tableau alloué dynamiquement? Ce n'est pas possible, ça donnera toujours la taille d'un pointeur (4 octets), donc forcément il n'acceptera que 3 caractères (4 - 1 pour le '\0'). Passe directement la taille que tu as allouée, pas sizeof(ptr).

Oui c'était ca, en effet, j'ai vite affiché le sizeof de mon "tableau" et j'ai remarqué mon erreur.

J'ai finalement opté pour faire moi même ma fonction en m'inspirant du modèle donné dans la FAQ, ca me permet de filtrer les caractères que l'utilisateur entre.



./19
10.06.2001 - 21295
11:01  Thibaut - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Qu'est-ce qu'il faudrait changer pour que le _main de likeonpc soit propre selon tes critères (en supposant que tes critères soient bons) ? Tu parles beaucoup mais n'apportes rien, comme toujours.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./20
10.06.2001 - 32547
11:48  Kevin Kofler - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Bah, faudrait que je me plonge dessus et commence à coder, c'est comme ça que je vois comment faire les choses au mieux, c'est dur de le dire comme ça au préalable.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./21
10.06.2001 - 21295
12:13  Thibaut - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

OK, tu ne sais même pas ce qui pourrait te déplaire. On va finir par croire que tu critiques le travail des gens juste pour le plaisir de te croire meilleur.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./22
10.06.2001 - 32547
12:25  Kevin Kofler - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Il faut un certain feeling pour coder quelque chose de bien pensé, et c'est souvent en essayant qu'on y arrive. Tout ce que je peux dire, c'est que ta solution ne me convient pas. Le problème principal est que certaines propriétés du wrapper devraient être configurables, par exemple la manière de gérer les codes d'erreurs retournés par main (et exit devrait adopter le même comportement pour être cohérent), ou encore le clrscr implicit. De plus, rajouter des fonctionnalités d'édition à stdio.h et avoir un main ISO sont 2 choses totalement différentes qui ne devraient pas dépendre l'une de l'autre. L'utilisation de tableaux de taille fixe est aussi un signe de mauvaise conception.

C'est un problème assez compliqué. S'il y avait une solution simple, elle serait déjà implémentée!


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./23
10.06.2001 - 21295
14:10  Thibaut - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

T'as toujours la même difficulté à discerner les principes généraux des cas particuliers. Va taper plus de 256 caractères dans les arguments... Ça passe sur PC ça d'ailleurs ? Si on augmente la taille maximale des arguments à 4000 octets, tu trouveras encore que ce ce sera trop peu ? Y'a un moment où il faut arrêter d'être ridicule. Une taille dynamique creuserait des trous dans le tas. J'appelle pas ça une solution convenable. Et toi ?

L'utilisation des nouvelles fonctions I/O n'a jamais été dépendante du _main. Tu parles sans savoir.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./24
18.06.2001 - 20189
14:17  Folco - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

A moins que tu ne lock pas ton handle contenant les arguments ? Ca permet de garder un heap fluide. Je dis ça, ce n'est qu'une idée, je ne sais pas comment ça serait appliquable à ton soft. :D


./25
10.06.2001 - 32547
14:32  Kevin Kofler - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Le comportement correct, c'est de ne permettre que des chaînes de caractères comme arguments et de mettre directement des pointeurs sur la pile d'expressions (cf. GetStrnArg) dans argv. La recopie ne sert à rien.

Ton argumentation, ça me rappelle "640 KB should be enough for everyone". #roll#

256 caractères d'arguments sont vite atteints, surtout pour un portage d'un programme PC.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./26
13.06.2002 - 37284
15:46  @Zeph - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Sans vouloir foutre la merde (mais bon, vu que le topic est déjà en HS complet j'ai pas trop de remords :p ) c'est vrai qu'un tableau de taille statique pour contenir les arguments (que ce soit 256 ou 4000 octets) c'est tout pourri :D

(et bien sûr que ça passe avec beaucoup plus d'argument, heureusement d'ailleurs, sinon les commandes genre "grep blabla `find . -name '*.log'`" ça serait pas joyeux :D )


HA! I knew someone was alive in here. AH! Oh. My. God. You look terrible - ummm... good. Looking good, actually.
------------------------------------------
Mirari² :: It offers what you want, not what you need
3l33t :: Relax, we understand j00 ^^
./27
10.06.2001 - 21295
16:05  Thibaut - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Eh bien moi, Kevin, je touve que ta solution est naze :) Passer plusieurs arguments ou même passer un switch suivi d'une valeur nécessiterait de tout mettre dans des guillemets séparés par des virgules. Et que dire des appels de fonctions/programmes qui retournent des valeurs numériques, puisque tu parles de ça Zephyr ? Il faudrait les appeler au préalable et recopier les résultats à la main.
Une solution si bordélique ne mérite même pas d'être étudiée face à la solution actuelle.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./28
10.06.2001 - 21295
18:57  Thibaut - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Je viens de redécouvrir les possibilités assez spéciales que le TIOS offre sur les blocs de mémoire. On peut allouer un bloc flottant, le réallouer, etc, et finir par le monter tout en haut du tas en le bloquant. On est certain que cette séquence d'opérations ne laissera pas de trou dans le tas ?

Si oui, on peut faire comme ça :
- commencer à écrire argv sur le bloc alloué dans la pile
- en cas de dépassement, allocation d'un bloc pour poursuivre l'écriture (et réallocations au besoin).
- bloquage du bloc en tête de tas.

Il ne faudrait pas que le code qui fait tout ça dépasse 256 octets, sinon le gain de RAM obtenu grâce à l'allocation sur la pile serait perdu.


Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com
Quelques idées personnelles ici.
./29
10.06.2001 - 32547
22:24  Kevin Kofler - Posté : 07-11-2009  M   Signaler un abus Signaler un contenu inapproprié

Moi, je trouve que ton bidouillage est naze. En plus, si tu parses les espaces dans les chaînes, que faire si tu veux passer un argument qui contient un espace? Un bordel de quotes par dessus celui déjà nécessaire pour les chaînes TIOS? #sick#

Pour convertir un nombre en chaîne de caractères, le TI-BASIC propose la gentille fonction string.

Et si on veut vraiment gérer les arguments de tout type, on n'a qu'à utiliser les fonctions natives directement, pas le layer de compatibilité C ISO.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./Publicité AdSense
 « - 1/3 - Suivant » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (78r) » alternative à fgets

./Poster un nouveau message. - Ouvrir dans une nouvelle fenêtre
Login : Mot de passe :

url - image - media  
spoiler - pre - fixed
quote - box - hr
poll - code





Smileys
Smileys perso
Pièce jointe
     Flood control (?) :    
Les messages postés sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus.

» yN ©1624 - Aide / Charte / Crédits
42ms | Statistiques