Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1264 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  un ptit truc tout con mais qui plante, pourquoi ?(pointeur)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un ptit truc tout con mais qui plante, pourquoi ?(pointeur)

n°336654
swich
snps
Posté le 18-03-2003 à 20:47:41  profilanswer
 

voila donc pour debuter les pointeurs, je voulais me faire un ptit exo qui permet de rentrer une chaine de caracteres et qui en renvoie la taille..
mais bon a l'execution ca plante, je vois pas pourquoi..
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4. char * s1;
  5. int j;
  6. printf("entrez une chaine : " );
  7. scanf("%s",&s1);
  8. j=strlen(s1);
  9. printf("\n taille de la chaine 1 : %i",j);
  10. getch();
  11. }

mood
Publicité
Posté le 18-03-2003 à 20:47:41  profilanswer
 

n°336656
mrbebert
Posté le 18-03-2003 à 20:51:13  profilanswer
 

Quand tu écrits : "char * s1;", tu déclares un pointeur (donc une adresse en mémoire) sur une chaîne de caractères. Mais sans savoir à priori (tant que tu ne l'as pas initialisé) où il pointe.
Quand tu cherches à écrire à cette adresse, il y a de fortes chances pour que tu n'ais pas le droit d'y écrire. Forcément, ca plante [:proy]


Message édité par mrbebert le 18-03-2003 à 20:53:05
n°336661
swich
snps
Posté le 18-03-2003 à 20:54:32  profilanswer
 

mrBebert a écrit :

Quand tu écrits : "char * s1;", tu déclares un pointeur (donc une adresse en mémoire) sur une chaîne de caractères. Mais sans savoir à priori (tant que tu ne l'as pas initialisé) où il pointe.
Quand tu cherches à écrire à cette adresse, il y a de fortes chances pour que tu n'ais pas le droit d'y écrire. Forcément, ca plante [:proy]


ok et pour remedier a ca, je dois faire quoi ?

n°336662
mrbebert
Posté le 18-03-2003 à 20:58:16  profilanswer
 

Faire en sorte que ton pointeur pointe vers une adresse valide.
 
Pour allouer une zone mémoire, tu as la fonction malloc(taille);
Elle fait en sorte de réserver une zone mémoire de la taille voulue et te renvoie le pointeur :
    char *s1;
    int j;
    s1 = malloc(50); // on réserve 50 octets
    printf("entrez une chaine : " );
    scanf("%s", s1);
 
Sinon, tu peux récupérer l'adresse d'une variable :
int i;
int *ptr;
i = 1;
ptr = &i; // ptr pointe sur i
*ptr = 2; // i vaut maintenant 2
 
edit : pour scanf, il faut passer un pointeur. s1 est déja un pointeur, il faut donc écrire scanf("%s", s1); et pas scanf("%s", &s1);
Sinon, tu récupère l'adresse du pointeur, ayant le type char ** :pt1cable:


Message édité par mrbebert le 18-03-2003 à 21:01:59
n°336664
nraynaud
lol
Posté le 18-03-2003 à 21:06:08  profilanswer
 

mrBebert a écrit :

Faire en sorte que ton pointeur pointe vers une adresse valide.
 
Pour allouer une zone mémoire, tu as la fonction malloc(taille);
Elle fait en sorte de réserver une zone mémoire de la taille voulue et te renvoie le pointeur :
    char *s1;
    int j;
    s1 = malloc(50); // on réserve 50 octets
    printf("entrez une chaine : " );
    scanf("%s", s1);


 
C'est l'enseignement moderne d'apprendre à un débutant dès le départ à faire des overflows ?
C'est très à la mode, mais je ne suis pas convaincu que se soit vraiment un truc super-utile.


Message édité par nraynaud le 18-03-2003 à 21:07:53
n°336668
Taz
bisounours-codeur
Posté le 18-03-2003 à 21:08:39  profilanswer
 

pas la peine de faire de malloc/free
 

Code :
  1. char buffer[128];
  2. scanf("%s", buffer);
  3. // ou mieux
  4. fgets(buffer, sizeof buffer, stdin);


 
 
et il manque un return 0; à la fin de ton main

n°336669
swich
snps
Posté le 18-03-2003 à 21:09:43  profilanswer
 

nraynaud a écrit :


 
C'est l'enseignement moderne d'apprendre à un débutant dès le départ à faire des overflows ?
C'est très à la mode, mais je ne suis pas convaincu que se soit vraiment un truc super-utile.


propose moi une soluce alors..
 

n°336672
nraynaud
lol
Posté le 18-03-2003 à 21:15:34  profilanswer
 

swich a écrit :


propose moi une soluce alors..
 
 


 
Taz vient de le faire (à peine mieux au niveau fonctionnel, mais au moins y'a pas de pb de mémoire).
 
Le pb en C c'est qu'il n'y a de base aucune fonction de haut niveau, donc t'est obligé dans ton cas d'écrire à la main une fonction qui va rallonger le buffer en fonction de la taille de la saisie (alors qu'en tant que débutant ce qui t'intéresse c'est de foutre une ligne dans un tableau de char, pas d'attaquer tout de suite ce genre de conneries).
 
Si t'as envie de rentrer dans du bizzare, il y a %ns (de mémoire) dans la glibc qui fait le malloc tout seul (à toi de désallouer à la main).

n°336676
mrbebert
Posté le 18-03-2003 à 21:24:03  profilanswer
 

nraynaud a écrit :

C'est l'enseignement moderne d'apprendre à un débutant dès le départ à faire des overflows ?
C'est très à la mode, mais je ne suis pas convaincu que se soit vraiment un truc super-utile.

Le but, c'était juste de montrer ce que faisait la fonction malloc et de montrer où ca devrait s'insérer dans son programme :o

n°336680
swich
snps
Posté le 18-03-2003 à 21:31:12  profilanswer
 

mrBebert a écrit :

Le but, c'était juste de montrer ce que faisait la fonction malloc et de montrer où ca devrait s'insérer dans son programme :o  


 :jap:  
je dois commencer a voir les pointeurs, je sais qu'on peut le faire autrement cet exo, mais ici je voulais des pointeurs...
 
Merci tout le monde pour l'aide apportee :)  [:yuck]

mood
Publicité
Posté le 18-03-2003 à 21:31:12  profilanswer
 

n°336682
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-03-2003 à 21:31:40  profilanswer
 

nraynaud a écrit :


C'est l'enseignement moderne d'apprendre à un débutant dès le départ à faire des overflows ?
C'est très à la mode, mais je ne suis pas convaincu que se soit vraiment un truc super-utile.


 

nraynaud a écrit :


Taz vient de le faire (à peine mieux au niveau fonctionnel, mais au moins y'a pas de pb de mémoire).  


 
Tous ceux qui te connaissent ici connaissent aussi ton aversion profonde pour le C. Ceci dit, ce n'est pas une raison pour en dégouter les autres ou pour faire des réflexions gratuites qui n'apportent rien...


---------------
J'ai un string dans l'array (Paris Hilton)
n°336694
nraynaud
lol
Posté le 18-03-2003 à 21:40:15  profilanswer
 

Harkonnen a écrit :


 
 
 
Tous ceux qui te connaissent ici connaissent aussi ton aversion profonde pour le C. Ceci dit, ce n'est pas une raison pour en dégouter les autres ou pour faire des réflexions gratuites qui n'apportent rien...


 
Je suis pourtant le seul à avoir pointé explicitement la connerie du code de mrBebert (Taz l'a fait implicitement).
 
D'autre part, en dehors de l'ironie sur les méthodes d'apprentissage et la mode ravageuse des conneries avec la mémoire, tout ce que j'ai dit est purement factuel.

n°336700
polo021
Posté le 18-03-2003 à 21:42:55  profilanswer
 

Harkonnen a écrit :


 
 
 
Tous ceux qui te connaissent ici connaissent aussi ton aversion profonde pour le C. Ceci dit, ce n'est pas une raison pour en dégouter les autres ou pour faire des réflexions gratuites qui n'apportent rien...


 
bien dit

n°336703
Taz
bisounours-codeur
Posté le 18-03-2003 à 21:45:21  profilanswer
 

nraynaud a écrit :


 
Je suis pourtant le seul à avoir pointé explicitement la connerie du code de mrBebert (Taz l'a fait implicitement).
 
D'autre part, en dehors de l'ironie sur les méthodes d'apprentissage et la mode ravageuse des conneries avec la mémoire, tout ce que j'ai dit est purement factuel.

je suis d'accord avec toi.

n°336712
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-03-2003 à 21:52:10  profilanswer
 

nraynaud a écrit :


 
Je suis pourtant le seul à avoir pointé explicitement la connerie du code de mrBebert (Taz l'a fait implicitement).


Je suis d'accord sur le fond, mais pas sur la forme. Il aurait été plus utile de donner une explication du style "Attention ! Ce code peut planter dans le cas ou tu saisis plus de 50 caractères" et de mettre la correction ensuite plutot que de critiquer Bebert.


---------------
J'ai un string dans l'array (Paris Hilton)
n°336718
nraynaud
lol
Posté le 18-03-2003 à 21:58:46  profilanswer
 

Harkonnen a écrit :


Je suis d'accord sur le fond, mais pas sur la forme. Il aurait été plus utile de donner une explication du style "Attention ! Ce code peut planter dans le cas ou tu saisis plus de 50 caractères" et de mettre la correction ensuite plutot que de critiquer Bebert.


 
Chacun son truc, je préfère que bebert ne donne plus jamais de code foireux à des débutants que moi donner un code que je n'ai pas la possibilité de tester, sachant que quelqu'un d'autre le fera avec du code un peu plus testé.
 
D'autre part c'est au delà de 49 caractères que ça chie (langage de merde où il faut réfléchir avant de dire ou écrire le moindre truc parce qu'il y a des pièges à con partout)
 
Merci pour la perche.


Message édité par nraynaud le 18-03-2003 à 22:00:26
n°336719
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-03-2003 à 21:59:58  profilanswer
 

nraynaud a écrit :

D'autre part c'est à partir de 49 caractères que ça chie (langage de merde où il faut réfléchir avant de dire ou écrire le moindre truc parce qu'il y a des pièges à con partout)
 
Merci pour la perche.

[:tapai]


---------------
J'ai un string dans l'array (Paris Hilton)
n°336721
nraynaud
lol
Posté le 18-03-2003 à 22:02:12  profilanswer
 


 
La violence de résout rien .... (d'ailleur j'avait fait une petite erreur de formulation)

n°336722
mrbebert
Posté le 18-03-2003 à 22:03:09  profilanswer
 

nraynaud a écrit :

Je suis pourtant le seul à avoir pointé explicitement la connerie du code de mrBebert (Taz l'a fait implicitement).
 
D'autre part, en dehors de l'ironie sur les méthodes d'apprentissage et la mode ravageuse des conneries avec la mémoire, tout ce que j'ai dit est purement factuel.

Je rappelle que la question à la base, c'est "comment faire pour avoir un pointeur qui pointe vers quelque chose" :/  
Désolé, mais sur un forum, je réponds au question, je suis pas là pour balancer ma science. Oui y a un risque de débordement, oui je n'ai pas vérifié le résultat du malloc, oui y avait plus simple.
Mais ca ne sert à rien de déblatérer sur les problèmes de débordement, ou de fuites mémoires ou autre si la personne qui pose la question ne sait même pas comment allouer de la mémoire. Faudrait voir à commencer par le début :o  
Evidemment que les quelques lignes de code peuvent bugger, mais elle sont là pour montrer l'enchainement nécessaire pour utiliser des pointeurs. Et c'est ce que voulait l'auteur du topic il me semble.
Il débuggera quand il comprendra ce qui se passe, et pas l'inverse
 
Evidemment, c'est toujours plus facile de critiquer que de proposer quelque chose facilement compréhensible par un débutant :/  

n°336725
swich
snps
Posté le 18-03-2003 à 22:11:23  profilanswer
 

waouuuu
ce devie toujours comme ca qd y'a une question sur le C ?

n°336727
nraynaud
lol
Posté le 18-03-2003 à 22:13:57  profilanswer
 

mrBebert a écrit :

Je rappelle que la question à la base, c'est "comment faire pour avoir un pointeur qui pointe vers quelque chose" :/  
Désolé, mais sur un forum, je réponds au question, je suis pas là pour balancer ma science. Oui y a un risque de débordement, oui je n'ai pas vérifié le résultat du malloc, oui y avait plus simple.
Mais ca ne sert à rien de déblatérer sur les problèmes de débordement, ou de fuites mémoires ou autre si la personne qui pose la question ne sait même pas comment allouer de la mémoire. Faudrait voir à commencer par le début :o  
Evidemment que les quelques lignes de code peuvent bugger, mais elle sont là pour montrer l'enchainement nécessaire pour utiliser des pointeurs. Et c'est ce que voulait l'auteur du topic il me semble.
Il débuggera quand il comprendra ce qui se passe, et pas l'inverse
 
Evidemment, c'est toujours plus facile de critiquer que de proposer quelque chose facilement compréhensible par un débutant :/  
 


 
Excuse-moi, je croyait qu'il voulait saisir une chaîne de caractères et en mesurer la longueur, je me traîne un crétinisme ces temps-ci, ça doit être les coup de soleil de se week-end, ou la bouffe d'ici.
 
Par contre, je remarque que toi tu l'a traîné sur des pointeurs, une sorte de manière de ramener ta science sans savoir s'il avait eu une introduction à la bête.
 
edit : effectivement, ça doit être le soleil, et un peu l'énervement de lire ce type de trucs aussi.


Message édité par nraynaud le 18-03-2003 à 22:22:06
n°336729
lorill
Posté le 18-03-2003 à 22:15:29  profilanswer
 

bougez pas, je vais chercher le popcorn [:dawa]

n°336731
nraynaud
lol
Posté le 18-03-2003 à 22:16:07  profilanswer
 

swich a écrit :

waouuuu
ce devie toujours comme ca qd y'a une question sur le C ?
 


 
Non, le C++ aussi, les langages casse-gueule faut toujours au moins 3 réponses pour en savoir plus.

n°336732
swich
snps
Posté le 18-03-2003 à 22:16:27  profilanswer
 

nraynaud a écrit :


 
Excuse-moi, je croyait qu'il voulait saisir une chaîne de caractères et en mesurer la longueur, je me traîne un crétinisme ces temps-ci, ça doit être les coup de soleil de se week-end, ou la bouffe d'ici.
 
Par contre, je remarque que toi tu l'a traîné sur des pointeurs, une sorte de manière de ramener ta science sans savoir s'il avait eu une introduction à la bête.


hmm reli un peu le debut du poste, c'est moi qui est demande des pointeurs ;)

n°336734
nraynaud
lol
Posté le 18-03-2003 à 22:20:58  profilanswer
 

swich a écrit :


hmm reli un peu le debut du poste, c'est moi qui est demande des pointeurs ;)
 


 
bonne remarque, désolé pour le poste précédent.
 
Donc si c'est réellement pointeurs, c'est -surtout- gaffe aux bornes (90% du temps de débug, surtout au début).
 
edit :  typo


Message édité par nraynaud le 18-03-2003 à 22:23:05
n°336735
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-03-2003 à 22:23:27  profilanswer
 

nraynaud a écrit :


 
Excuse-moi, je croyait qu'il voulait saisir une chaîne de caractères et en mesurer la longueur, je me traîne un crétinisme ces temps-ci, ça doit être les coup de soleil de se week-end, ou la bouffe d'ici.
 
Par contre, je remarque que toi tu l'a traîné sur des pointeurs, une sorte de manière de ramener ta science sans savoir s'il avait eu une introduction à la bête.


Bon nraynaud, je ne le répeterais pas ! Sois tu fais de la provoc au second degré, auquel cas je te serais reconnaissant de mettre des smileys pour qu'il n'y ait aucune ambiguité, soit tu as vraiment le melon et là je peux te conseiller une cure d'humilité aigüe histoire de dégonfler cet immense bulbe. Quoi qu'il en soit, la prochaine réflexion condescendante de ce genre, et ce sera un séjour chez les TéléTubbies. A bon entendeur...


---------------
J'ai un string dans l'array (Paris Hilton)
n°336750
nraynaud
lol
Posté le 18-03-2003 à 22:37:14  profilanswer
 

Harkonnen a écrit :


Quoi qu'il en soit, la prochaine réflexion condescendante de ce genre, et ce sera un séjour chez les TéléTubbies. A bon entendeur...
 


 
note pour plus tard : vérifier qu'il est pas modo avant de reprendre quelqu'un.

n°336760
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-03-2003 à 22:47:17  profilanswer
 

nraynaud a écrit :


 
note pour plus tard : vérifier qu'il est pas modo avant de reprendre quelqu'un.


Je ne t'empeche pas de reprendre qui que ce soit ! Je te reproche juste un ton très orgueilleux, et limite de prendre les gens pour des cons. Donc, si c'est du second degré, ça serait bien de le signaler par des smileys...


---------------
J'ai un string dans l'array (Paris Hilton)
n°336764
Taz
bisounours-codeur
Posté le 18-03-2003 à 22:49:20  profilanswer
 

spa bientot fini vos chamailleries, toute façon smoi qui a la plus grosse  [:the grosminet]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  un ptit truc tout con mais qui plante, pourquoi ?(pointeur)

 

Sujets relatifs
[PHP] Ptit prob de config pour les sessionsstrstr donne un pointeur, mais j'aimerai un(e) string =)
[C++] Vous utilisez des handles à la place de pointeur?[css] un truc pour corriger vos box-model !
J'arrive pas à faire un truc dans access expert demandéMFC pointeur sur CDocument
[c++] effacer un tableau de pointeur[PHP] Ptit prob avec easyphp 1.6 :/
[HTML, JS] Accès pointeur ligne d'un tableau htmlIntercepter l'erreur produite par explorer quand il plante
Plus de sujets relatifs à : un ptit truc tout con mais qui plante, pourquoi ?(pointeur)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR