Il y a 39 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
 Page :  1  2
Page Suivante 
Auteur Sujet :

[C++] Tableaux, pointeurs, l'embrouille : Besoin d'aide

n°3885
Deadog
Dain Bramaged
Posté le 24-08-2004 à 13:24:33  profilanswer
 

Reprise du message précédent :
si tenté qu'il transmette le pointeur ...
 
bon, deather, t'écoute un peu !
ton printf/printw segfaulté pke tu faisait un %s alors que tu lui passé qu'un seul caractère (t_Name[Tmp] si j'me souviens bien)
ça on te l'avais déjà dit :d
 
ensuite, dans ta boucle la :
for(Tmp=0;Tmp<15;Tmp++)
     {
        if((Tmp_char=getch())!=10)
        {
           t_Name[Tmp]=Tmp_char;
           cout << Tmp_char;
           refresh();
        } else
        {
           t_Name[Tmp]='\0';
           break;
        }
     }  
 
tu fais tjrs pas attention à ton 0 final !
tu le met bien quand on fait entrer, mais si jamais tu arrive au bout de la boucle sans jamais avoir fait d'entré, tu sors de la boucle et tu te retrouve avec une chaîne sans 0 final :/
 
 
pis remplace Tmp_char=getch())!=10 par Tmp_char=getch())!='\n' ;)


Message édité par Deadog le 24-08-2004 à 13:24:54

---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

mood
Google
Posté le 24-08-2004 à 13:24:33  profilanswer
 

n°3890
Deather2
OpenBSD: the way to go!
Posté le 24-08-2004 à 18:10:06  profilanswer
 

Ok pour le printf/w (excusez moi en remontant me suis rendu compte que y'avais des posts que j'ai raté)
Je savais pas que printf/w ne s'arretait pas avant le \0, maintenant je comprend mieux, merci :)
 
je remplacerai 10 par \n voir si ça marche (le getch est spécial ncurses je crois, donc je sais pas si il retourne les memes valeurs que le normal ;)
 
Merci à vous pour votre aide :)

n°3891
Deadog
Dain Bramaged
Posté le 24-08-2004 à 19:00:00  profilanswer
 

bah il retourne de l'ascii
probablement en charset j'sais plus koi


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3893
xDiamant
Posté le 25-08-2004 à 10:09:46  profilanswer
 

slt :
-----
 
Pourkoi tu te fais chier a fair une boucle qui concatene les caraterres tapés ? un simple gets() et c bon. "sdtio.h"  
 
...
char Name[15];
gets(Name); // et non gets(&Name) ou gets(*Name) !
printf("Le nom est : %s",Name);
...
 
gets met automatiquement le '\0' a la fin. Car comme on te l'a deja dit en C les chaines de caraterre ce termine toujours par un '\0'
 
Pas besion de pointeur a la con pour ce truc car le Nom d'un tableau ou d'un chaine de caracterre C SONT ADRESSE.
 
maintenant si tu veut lire caracterre par caracterre tu peut fair :
 
unsigned Lgr = strlen(Name);
for(unsigned i=0; i<Lgr; i++) printf("%c",Name[i]);
 
Bye

n°3894
Deadog
Dain Bramaged
Posté le 25-08-2004 à 13:46:03  profilanswer
 

on ne fait jamais de gets sauf cas très exceptionnel !!!!
 
 
on utlise fgets
 
et visiblement il veut pas pke ncurse ça refresh pas :d


Message édité par Deadog le 25-08-2004 à 13:46:22

---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3895
KnX
To be or not to code.
Posté le 25-08-2004 à 14:28:53  profilanswer
 

c'est pas dans gets qu'il y a une faille potentielle ?


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°3897
Deadog
Dain Bramaged
Posté le 25-08-2004 à 18:50:42  profilanswer
 

KnX a écrit :

c'est pas dans gets qu'il y a une faille potentielle ?


 
 
et pas une petite ...


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3898
Deather2
OpenBSD: the way to go!
Posté le 25-08-2004 à 19:47:39  profilanswer
 

Ça va ne vous embêtez pas, tout marche bien ormi le free()
Comme j'ai besoin du pointeur durant l'execution, je devrait le liberer dans la fonction Quit() mais faudrait que je le passe en argument, bref la galère...
C'est grave de pas liberer la mémoire non ? :/

n°3899
Deadog
Dain Bramaged
Posté le 25-08-2004 à 19:57:20  profilanswer
 

si on veux faire les choses salement, on s'en fous quand tu quitte un prog, la mémoire est libérer
 
mais bon, spa non plus une raison ^^


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3900
Deather2
OpenBSD: the way to go!
Posté le 25-08-2004 à 22:04:08  profilanswer
 

Très bien, je comprend.
Mais bon vu que j'ai besoin de ce pointeur tout au long du programme, c'est très bien si la mémoire est vidée en quittant, car c'est là qu'il doit être détruit ;)

n°3927
Lightness1​024
Posté le 28-08-2004 à 10:44:55  profilanswer
 

ben met un free avant la fin de la fonction main c + propre que le garbage collector.


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°3936
Deather2
OpenBSD: the way to go!
Posté le 28-08-2004 à 18:23:10  profilanswer
 

Ben non car le pointeur n'est pas déclaré dans main() ;)

n°3937
ced-2k
TODO : Insert text here.
Posté le 28-08-2004 à 18:42:57  profilanswer
 

deather2 a écrit :

Ben non car le pointeur n'est pas déclaré dans main() ;)

comme je l'ai dit plus haut, à partir du moment où ta fonction retourne le pointeur, tu peut très bien le libérer dans le main...
 

Code :
  1. void main(void)
  2. {
  3.    char * temp = NULL;
  4.    CPersonnage * CP = new CPersonnage(...);
  5.    temp = CP->AskCharName(void);
  6.    free(temp);
  7. }


Message édité par ced-2k le 28-08-2004 à 18:52:30
n°3938
Deather2
OpenBSD: the way to go!
Posté le 28-08-2004 à 18:50:59  profilanswer
 

oui j'ai bien compris, mais le pointeur retourné par la fonction est utilisé dans des méthode de la classe CPersonnage, donc pour le retourner jusqu'a la fonction Quit() que j'utilise, vive la galère :/
Au fait, vu que CP est dynamique, c'est pas -> à la place du point ? :D
 
edit: c vraiment mieux de le créer avec new ? car moi je fais CPersonnage CP(...);


Message édité par Deather2 le 28-08-2004 à 18:51:28
n°3939
ced-2k
TODO : Insert text here.
Posté le 28-08-2004 à 18:51:58  profilanswer
 

si :jap:  
et tu es pas obligé de retourner jusq'au main, met le dans le destructeur de CPersonnage alors...
 
et perso j'utilise new par habitude je sais pas vraiment si c'est mieux ou pas


Message édité par ced-2k le 28-08-2004 à 18:54:03
n°3940
Deather2
OpenBSD: the way to go!
Posté le 28-08-2004 à 18:54:15  profilanswer
 

Ah pas bête j'y avais pas pensé! merci :)
edit: ok pr new ;)


Message édité par Deather2 le 28-08-2004 à 18:54:33
n°3942
Deadog
Dain Bramaged
Posté le 28-08-2004 à 19:24:04  profilanswer
 

oui, préfère new


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3943
Deadog
Dain Bramaged
Posté le 28-08-2004 à 19:26:24  profilanswer
 

d'ailleur, tant que possible, utilise std::string :d


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3944
Deather2
OpenBSD: the way to go!
Posté le 28-08-2004 à 19:28:00  profilanswer
 

Très bien, j'ai crée un destructeur, j'utilise new et delete, ça marche impec, je libère le pointeur avec free dans le déstructeur, merci à vous !
 
c'est quoi std::string?
 
c'est par exemple string str("abc" ); ? puis str.c_str ?

n°3945
Deadog
Dain Bramaged
Posté le 28-08-2004 à 19:30:03  profilanswer
 

ouai, nan, en fait on s'en fous de std::string, tant que tes char* marchent ;)


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°3946
Deather2
OpenBSD: the way to go!
Posté le 28-08-2004 à 19:38:02  profilanswer
 

Lol oki :p

n°3950
Lightness1​024
Posté le 29-08-2004 à 01:17:40  profilanswer
 

puis il est temps de passer au TCHAR ou bien au wide char carrément.


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°3951
Deather2
OpenBSD: the way to go!
Posté le 29-08-2004 à 01:30:19  profilanswer
 

Les typedef en majuscules ça vient pas de windows ça ?
J'code sous linux moi ;)

n°3956
Lightness1​024
Posté le 29-08-2004 à 10:30:04  profilanswer
 

je crois que tchar a une définition portable.
c'est pas dur, c'est juste un truc qui selon que tu mets /UNICODE dans les options de compilation ou non tous les TCHAR du code deviennent des wchar_t sinon des char.


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°3959
Deather2
OpenBSD: the way to go!
Posté le 29-08-2004 à 20:49:01  profilanswer
 

Concretement ça changera quoi ?

n°3961
Lightness1​024
Posté le 29-08-2004 à 23:47:37  profilanswer
 

disons que si on veut mettre une intégrale dans son nom ou un caractère en kana simplifié enfin bcp de choses koi, on pourra. pense aux japonais :)


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°3962
Deadog
Dain Bramaged
Posté le 29-08-2004 à 23:58:09  profilanswer
 

le char * t'en empêche pas ...
 
les 2 seuls goulots d'étranglement dans l'unicode c'est quand tu enregistres ton fichier source (eg, ton éditeur de code), et la où sa affiche (console, interface, ...)
 
l'entré et la sortie, qui demande juste un peu de configuration (voir aucune pour certaine lib graphique)


---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

mood
Google
Posté le 29-08-2004 à 23:58:09  profilanswer
 

 Page :  1  2
Page Suivante 

Aller à :
Ajouter une réponse
 

Hit Parade