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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6
Auteur Sujet :

les pointeurs , les tableaux ??? je mis perd

n°1137958
Taz
bisounours-codeur
Posté le 02-07-2005 à 11:27:16  profilanswer
 

Reprise du message précédent :
non ça roule pas.

mood
Publicité
Posté le 02-07-2005 à 11:27:16  profilanswer
 

n°1137981
super-tupa​pau
Posté le 02-07-2005 à 11:48:10  profilanswer
 

tu peux me dire comme faire pour pointer sur une chaine de caractère??  :jap: s'il te plait

n°1137982
Taz
bisounours-codeur
Posté le 02-07-2005 à 11:49:02  profilanswer
 

const char *s = "hello";

n°1137984
Elmoricq
Modérateur
Posté le 02-07-2005 à 11:50:55  profilanswer
 

super-tupapau a écrit :

voila j'espere que j'ai compris mais j'ai lu ca dans un livre de C++ alors depuis la norme C99 comme c'est plus compatible peut-etre que c faux.


 
Que vient faire C99 là-dedans ? Les pointeurs est un mécanisme de base, si on les changeait, ça reviendrait à changer comment on fait une addition.
 
 

super-tupapau a écrit :

1. Ca fait longtemps que j'ai ce livre  :non:


 

super-tupapau a écrit :

Je vais l'acheter ce livre. sinon j'ai relu le chapitre pointeur dans mon livre de C++ est voila ce que j'ai retenu


 
...  :heink:  

n°1137988
super-tupa​pau
Posté le 02-07-2005 à 11:57:22  profilanswer
 

ce livre je l'ai eu sur le web mais j'aime pas du tout lire sur le webl et imprimer 1000 pages sa me tant vraiment pas voila
sinon pour les pointeurs je commencais a douter de la compatibilité entre le C et le C++

n°1137989
Taz
bisounours-codeur
Posté le 02-07-2005 à 11:58:04  profilanswer
 

...

n°1137991
super-tupa​pau
Posté le 02-07-2005 à 12:00:51  profilanswer
 

bon s'il vous plait réponder à la question au lieu de critiquer tout
 

Citation :

tu peux me dire comme faire pour pointer sur une chaine de caractère??  :jap: s'il te plait

n°1138045
super-tupa​pau
Posté le 02-07-2005 à 14:01:21  profilanswer
 

alors pas de réponse? pitié  :(  :(  :(
 

Citation :

const char *s = "hello";


 
excuse j'avais pas vu merci taz


Message édité par super-tupapau le 02-07-2005 à 14:05:44
n°1138132
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-07-2005 à 16:37:54  profilanswer
 

super-tupapau a écrit :

Je vais l'acheter ce livre. sinon j'ai relu le chapitre pointeur dans mon livre de C++ est voila ce que j'ai retenu
 
1. un pointeur c une variable qui contient l'adresse d'un autre variable


Oui

Citation :

2. on peut accèder à la valeur du pointeur (l'adresse qui contient et pas la valeur de cette adresse) en mettant & devant lui


Non. & permet de retourner l'adresse d'un objet.  


   T x;
   T *px = &x;


La valeur d'un pointeur est une adresse ou NULL. On y accède comme avec n'importe quelle variable.


   T *p = malloc(...);
 
   if (p != NULL)
   {
   }


Citation :

3. on peut accèder à l'adresse du pointeur en ne mettant rien devant ( c comme ca que l'on doit le transmettre au fonction)


Non. Un pointeur est un objet. On obtient l'adresse d'un objet avec &.


   T *p;
   T **pp = &p;


4. enfin le plus important on peut accèder à la valeur ou il pointe en mettent * devant lui.


Oui.

voila j'espere que j'ai compris mais j'ai lu ca dans un livre de C++ alors depuis la norme C99 comme c'est plus compatible peut-etre que c faux.

C'est partiellement faux. Les principes énoncés et corrigés sont valables en C90, C99 et probablement aussi en C++ (là, je m'aventure un peu...)
 
http://mapage.noos.fr/emdel/notes.htm#pointeurs


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1138135
chrisbk
-
Posté le 02-07-2005 à 16:43:01  profilanswer
 

ce titre [:le kneu]

mood
Publicité
Posté le 02-07-2005 à 16:43:01  profilanswer
 

n°1138146
super-tupa​pau
Posté le 02-07-2005 à 17:03:14  profilanswer
 

bien en fait j'ai recopier le texte du livre en C++ mais la je refais ma fonction est j'ai bien vu que ca allez pas mais mnt c bon j'avance.

n°1138166
super-tupa​pau
Posté le 02-07-2005 à 17:50:50  profilanswer
 

voila j'ai refait la fonction mais j'ai tjr des probleme avec les pointeurs
 

Code :
  1. #include <stdlib.h>
  2. #include <gtk/gtk.h>
  3. #include <math.h>
  4. #include "./algorithme.h"
  5. int * takotak_algo_new( char *entry ){
  6. int *result;
  7. *result = 0;
  8. printf("\nla chaine entrée est: %s\n", entry);
  9. /* Copier la chaine dans le tableau */
  10. char algo[150] = {0};
  11. char operation[150] = {0};
  12. int nb[150] = {0};
  13. int pos_nb = 0;
  14. char pre_algo;
  15. strcpy(algo, entry);
  16. int i;
  17. for(i=0;i<150;i++){
  18. if(algo[i] != '\0'){
  19. printf("\nle tableau à %i est égal à : %c", i, algo[i]);
  20. }
  21. else{
  22. break;
  23. }
  24. if(algo[i] != '+' && algo[i] != '-' && algo[i] != '*' && algo[i] != '/'){
  25. printf("\nle tableau à %i est un chiffre : %c", i, algo[i]);
  26. if(pre_algo != '+' && pre_algo != '-' && pre_algo != '*' && pre_algo != '/'){
  27. // Ecrire à la suite du chiffre précédent
  28. strcat(algo[pos_nb], algo[i]);
  29. nb[pos_nb] = atoi(algo[pos_nb]);
  30. // Préciser pour le caractère suivant que c'était un chiffre
  31. pre_algo = algo[i];
  32. }
  33. else{
  34. // On rattrape le retard
  35. pos_nb = i;
  36. nb[pos_nb] = atoi(algo[i]);
  37. // Préciser pour le caractère suivant que c'était un chiffre
  38. pre_algo = algo[i];
  39. }
  40. }
  41. else{
  42. printf("\nle tableau à %i est une operation : %c", i, algo[i]);
  43. if(pre_algo == '+' || pre_algo == '-' || pre_algo == '*' || pre_algo == '/'){
  44. // Ecrire a la position actuelle
  45. operation[i] = algo[i];
  46. // Préciser pour le caractère suivant que c'était une opération
  47. pre_algo = algo[i];
  48. }
  49. }
  50. }
  51.         printf("\n\non obtient : %i\n", *result);
  52.        
  53. return result;
  54. }


 
lorsque je compile je suis averti
algorithme.c: Dans la fonction « takotak_algo_new »:
algorithme.c:46: attention : passage de l'argument n°1 de « strcat » transforme un entier en pointeur sans transtypage
algorithme.c:46: attention : passage de l'argument n°2 de « strcat » transforme un entier en pointeur sans transtypage
algorithme.c:47: attention : passage de l'argument n°1 de « atoi » transforme un entier en pointeur sans transtypage
algorithme.c:55: attention : passage de l'argument n°1 de « atoi » transforme un entier en pointeur sans transtypage
 
ce qui provoque forcement un segment fault
dois-je les transformer en pointeur? comment ? en créant des variable intermediaire?

n°1138182
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:19:14  profilanswer
 

# int *result;
#     *result = 0;
 
tu vois, tu nous a pris pour des cons tout à l'heure quand on a voulu te parler de result ...
 
# strcat(algo[pos_nb], algo[i]);
 
ON A DIT QUOI 100 X : VERIFIE LES TYPES !
 
C'EST QUOI LE TYPE DE algo[pos_nb] et algo[i] bordel :o

n°1138189
super-tupa​pau
Posté le 02-07-2005 à 18:23:34  profilanswer
 

je vous ai pas prit pour tes con du tous, j'ai recommencer ma fonction à zéro donc result je me égal à zéro pour etre tranquille pdt que je fait le reste. Et les TYPE DU TABLEAU  algo EST char. et pos_nb c int pour ce qui i c aussi int. ils sont tous inisalisé au zéro et se sont pas des pointeurs.

n°1138193
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:25:49  profilanswer
 

CQFD

n°1138194
astero-H
Posté le 02-07-2005 à 18:25:52  profilanswer
 

strcat veut dire un truc du genre "string concatenate"
Ça ne marche que pour les chaines (char *), pas pour les caractères (char).
char *  strcat ( char * dest, const char * src );  
 
idem pour atoi(), tu donnes un char alors qu'il veut un char *
int  atoi ( const char * string );  
 
T'as l'air d'avoir des soucis avec les types...
Essaie de trouver les prototypes de tes fonctions avant de les utiliser.
 
edit: bah vous êtes des rapides dans le coin :o


Message édité par astero-H le 02-07-2005 à 18:27:21
n°1138197
super-tupa​pau
Posté le 02-07-2005 à 18:28:30  profilanswer
 

je sais bien qu'il faut utiliser un char * mais comme faire pour passer d'un char à un char *. c meme pas possible je suppose.
j'ai essayé d'utiliser un pointeur comme ceci:
char *p;
p = &algo[pso_nb];
 
l'avertissement disparait mais pas l'erreur de segmentation

n°1138201
astero-H
Posté le 02-07-2005 à 18:30:54  profilanswer
 

char string[2];
 
string[0] = algo[i];
string[1] = '\0';
 
là t'exageres...
 
 
edit: oups c'est '\0' et pas '\n'
ça fait quelques années que j'ai pas fait de C... :pt1cable:


Message édité par astero-H le 02-07-2005 à 18:35:05
n°1138203
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:32:22  profilanswer
 

je laisse tomber, tu comprends vraiment rien aux chaînes. Quant à result, t'as qu'à retourner en page 1 lire mon message à propos de result. Si tu ne vois toujours pas le problème, commence sérieusement à te demander ce que tu as foutu ces dernières années

n°1138218
super-tupa​pau
Posté le 02-07-2005 à 18:41:07  profilanswer
 

pitié ne me laisse pas tomber taz nono  :cry:  
 
j'ai lu le premier message qui parle de return et tu met
 

Citation :

result n'est pas initialisé. ton code est toujours archi faux.


 
tu veux que je fasse ca result = 0; ???
 
sinon ce que j'ai foutu c trois derniere année c apprendre essentiellement le C++ (php mysql un ptit peu d'assembleur et de java) et c vraiment plus simple la POO
 
enfin quand tu dit que je comprend rien excuse astero-H mais quand je vois:

Code :
  1. char string[2];
  2. string[0] = algo[i];
  3. string[1] = '\0';


 
je suis desolé mais c pas que l'on est sur un forum de prog que l'on parle pas francais :non:  
une chose qui prouve que l'on connais bien quelque chose c quand on c'est l'expliqué en francais et pas juste le dire comme ci c'était une évidence


Message édité par super-tupapau le 02-07-2005 à 18:45:10
n°1138223
astero-H
Posté le 02-07-2005 à 18:43:27  profilanswer
 

houla!!
 
j'avais regardé que les erreurs, pas ton algo. C'est vrai que t'as l'air de galérer...
 
Mais bon ça justifie pas que le Taz s'emballe comme ça. Ça doit être encourageant pour un "débutant". Ce qui me faire rire c'est le truc marqué sous son pseudo : "bisounours codeur", pas tant bisounours que ça à ce que je vois...
 
super-tupapau : perds pas espoir, on passe tous par là (même Taz). C'est à force de galérer et de se tirer les cheveux que ça rentre. N'abandonne pas !! Même si ton truc est tordu tu devrais réussir à le faire marcher.

n°1138225
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:44:53  profilanswer
 

... franchement, tu crois vraiment que l'informatique c'est de la magie. Arrête de nous dire ce que tu sais faire, tu t'enfonces. T'as pas les bases de C, ni de C++, j'imagine même pas l'ASM, et Java, c'est pareil, si tu comprends pas le concept de pointeur ...
 
 
Tu veux pas sortir ton cours sur les pointeurs pour savoir la différence entre
 
*p et p ?

n°1138229
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:49:25  profilanswer
 

astero-H a écrit :

C'est à force de galérer et de se tirer les cheveux que ça rentre. N'abandonne pas !! Même si ton truc est tordu tu devrais réussir à le faire marcher.

Ta philosophie 'je rajoute une étoile là ou bien je mets un & ici', tu la gardes.

n°1138230
super-tupa​pau
Posté le 02-07-2005 à 18:51:15  profilanswer
 

si tu veux je suis une merde tu sait koi je m'en tape tanpis , c sympa vraiment. si tes prof je me tu parce que tes eleve il doive en bavé. Merci astero-H je compte pas laissé tomber. et pour la diff entre p et *p je site mon livre c++:
l'opérateur d'adressage indirect(*) ce que tu a appelé plus haut l'operateur de déférencement devant une variable signifie "valeur stocker à l'adresse". donc quand tu fait var = *p; tu mais la valeur de ce que pointe p dans la variable var ta,dis que p c la variable qui stock l'adresse

n°1138231
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:52:33  profilanswer
 

donc quand tu fais
 
int *result;
*result = 0;
 
 
c'est bon.

n°1138235
super-tupa​pau
Posté le 02-07-2005 à 18:54:29  profilanswer
 

je suppose que c'est une question piege:
euh bein comme result il pointe nul par je peux pas mettre une variable qui existe pas à zéro donc c pas bon c plutot:
int *result = 0;
 
ou  
 
int *result;
result = 0;


Message édité par super-tupapau le 02-07-2005 à 18:58:02
n°1138236
Taz
bisounours-codeur
Posté le 02-07-2005 à 18:57:27  profilanswer
 

int *result = 0;
*result = 0; ???

n°1138243
super-tupa​pau
Posté le 02-07-2005 à 19:00:44  profilanswer
 

bon la je comprend plus rien tu veux koi  
 
c'est  
int *result:
*result = 0;
 
ou  
int *result;
result = 0;
 
parce que la je suis plus embrouillé que avant le poste

n°1138246
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:02:59  profilanswer
 

je sais pas, à toi de nous dire quoi mettre pour là
 
int *
f()
{
  int * result;
  // ici
 
  return result;
}
 
pour que ça soit valide

n°1138248
super-tupa​pau
Posté le 02-07-2005 à 19:05:38  profilanswer
 

quand je met *result = 0;
ca provoque pas de segment fault
 
tandis que si je met result = 0;
le segment fault a lieu avant les différente impressions
 
je mettrais *result =0;


Message édité par super-tupapau le 02-07-2005 à 19:06:01
n°1138250
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:09:02  profilanswer
 

... retour à la case départ.

n°1138252
super-tupa​pau
Posté le 02-07-2005 à 19:10:09  profilanswer
 

alors c result = NULL;
je crois que j'ai enfin compris

n°1138255
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:11:51  profilanswer
 

t'as compris quoi, tout le monde se le demande.


Message édité par Taz le 02-07-2005 à 19:11:59
n°1138256
super-tupa​pau
Posté le 02-07-2005 à 19:12:30  profilanswer
 

ca fait pas de segment fault au moins

n°1138258
super-tupa​pau
Posté le 02-07-2005 à 19:13:26  profilanswer
 

mais le probleme reste quand meme avec la fonction atoi qui veux un char * et moi j'ai qu'un char commen faut faire

n°1138259
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:14:17  profilanswer
 

bon alors, je mets quoi dans ma fonction f() pour qu'elle renvoie un pointeur valide vers une int valant 42 ?


Message édité par Taz le 02-07-2005 à 19:14:28
n°1138260
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:15:11  profilanswer
 

super-tupapau a écrit :

mais le probleme reste quand meme avec la fonction atoi qui veux un char * et moi j'ai qu'un char commen faut faire


tu rajoutes des * ou des &, au choix, et dès que ça segfault plus, c'est bon.

n°1138268
super-tupa​pau
Posté le 02-07-2005 à 19:18:43  profilanswer
 

non évidament je sais ca veux pas dire que c bon apres je regarde le resulta et si il correspond a ce que je voulais j'utilise memprof pour verifier  si il y a pas de fuite de mémoire, ainsi qu'un programme pour ranger le code a la facon GNU. alors dans la fonction f comme argument? il faut un pointeur de type int

n°1138271
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:19:47  profilanswer
 

balance du code.

n°1138273
super-tupa​pau
Posté le 02-07-2005 à 19:21:29  profilanswer
 

voila le code de la fonction chef
 

Code :
  1. #include <stdlib.h>
  2. #include <gtk/gtk.h>
  3. #include <math.h>
  4. #include "./algorithme.h"
  5. int * takotak_algo_new( char *entry ){
  6. int *result;
  7. result = NULL;
  8. printf("\nla chaine entrée est: %s\n", entry);
  9. /* Déclaration des variables */
  10. char algo[150] = {0};
  11. char operation[150] = {0};
  12. int nb[150] = {0};
  13. int pos_nb = 0;
  14. char pre_algo;
  15. /* Copier la chaine dans le tableau */
  16. strcpy(algo, entry);
  17. int i;
  18. for(i=0;i<150;i++){
  19. if(algo[i] != '\0'){
  20. printf("\nle tableau à %i est égal à : %c", i, algo[i]);
  21. }
  22. else{
  23. break;
  24. }
  25. if(algo[i] != '+' && algo[i] != '-' && algo[i] != '*' && algo[i] != '/'){
  26. printf("\nle tableau à %i est un chiffre : %c", i, algo[i]);
  27. if(pre_algo != '+' && pre_algo != '-' && pre_algo != '*' && pre_algo != '/'){
  28. // Ecrire à la suite du chiffre précédent
  29. strcat(algo[pos_nb], algo[i]);
  30. nb[pos_nb] = atoi(algo[pos_nb]);
  31. // Préciser pour le caractère suivant que c'était un chiffre
  32. pre_algo = algo[i];
  33. }
  34. else{
  35. // On rattrape le retard
  36. pos_nb = i;
  37. nb[pos_nb] = atoi(algo[i]);
  38. // Préciser pour le caractère suivant que c'était un chiffre
  39. pre_algo = algo[i];
  40. }
  41. }
  42. else{
  43. printf("\nle tableau à %i est une operation : %c", i, algo[i]);
  44. if(pre_algo == '+' || pre_algo == '-' || pre_algo == '*' || pre_algo == '/'){
  45. // Ecrire a la position actuelle
  46. operation[i] = algo[i];
  47. // Préciser pour le caractère suivant que c'était une opération
  48. pre_algo = algo[i];
  49. }
  50. }
  51. }
  52.         printf("\n\non obtient : %i\n", *result);
  53.        
  54. return result;
  55. }

n°1138274
Taz
bisounours-codeur
Posté le 02-07-2005 à 19:22:33  profilanswer
 

#         printf("\n\non obtient : %i\n", *result);
 
 
c'est censé affiché quoi ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Résolu] [C#] Déclaration de tableaux d'objets à taille inconnueezPDF => tableaux et position "y"
Probleme super etrange de tableaux superposés [resolu]Bordures des tableaux sous FireFox
css et tableaux?Aligner deux tableaux
Probleme avec tableaux, demande d'aide aux spécialistes![Résolu] tableaux et sessions
les pointeurs - petite aide !Habillage de tableaux?
Plus de sujets relatifs à : les pointeurs , les tableaux ??? je mis perd


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