2017-10-11 1 views
1

Je crée des liaisons Lua pour ncurses et je veux implémenter getstr, qui lit dans une chaîne de l'utilisateur. Je veux que la chaîne soit de taille pratiquement illimitée, comme dans Lua, mais je ne suis pas sûr de la façon de l'implémenter. Est-ce que je viens de lire dans un tableau char de taille vraiment grande ou est-ce que je fais une sorte de magie avec getch jusqu'à ce que je lis dans un saut de ligne?Meilleure pratique pour lier ncurses 'getstr

Je vois que lcurses utilise LUAL_BUFFERSIZE mais est-ce la mémoire efficace? Est-ce la meilleure pratique?

Répondre

1

L'algorithme standard est de commencer avec un tampon de taille raisonnable et de ne le redimensionner que si nécessaire. Pour l'entrée de l'utilisateur sur le terminal, on peut supposer que l'entrée ne peut pas dépasser une centaine de caractères. Commencez avec un tampon de cette taille et, si nécessaire, augmentez-le.

Assurez-vous que vous utilisez wgetnstr() de sorte que vous pouvez mettre des limites sur la taille de l'entrée, mais j'utiliserais personnellement wgetch().

Une fois que vous avez la chaîne correctement obtenue, placez-la dans une chaîne LUA et nettoyez la mémoire.

+0

J'apprécie la réponse! Pourriez-vous fournir un exemple de code ou des liens vers un exemple de code? Je suis tout à fait nouveau à avancé c et je préférerais y aller un peu plus intelligemment que les essais et les erreurs. – AlgoRythm