les pointeurs , les tableaux ??? je mis perd - C - Programmation
Marsh Posté le 01-07-2005 à 23:36:00
strcmp(&algo[pos], "" )
hein ?
algo[pos] est de type char, donc utilise == pour comparer 2 char
-> strcmp(algo[pos], "+" ) -> algo[pos] == '+'
Marsh Posté le 01-07-2005 à 23:55:40
je voudrais bien mais a ce moment la il affiche cecic lors de la compile
algorithme.c: Dans la fonction « takotak_algo_new »:
algorithme.c:33: attention : comparaison entre un pointeur et un entier
algorithme.c:33: attention : comparaison entre un pointeur et un entier
algorithme.c:33: attention : comparaison entre un pointeur et un entier
algorithme.c:33: attention : comparaison entre un pointeur et un entier
algorithme.c:36: attention : comparaison entre un pointeur et un entier
et encoreune erreur de segmentation
enfin le '&' devant la variable j'avais oublié de l'anlever mais si j'ai bien compris quand on met & devant un pointeur cela signifie que l'on faut l'adresse ou il pointe et pas la valeur de cette adresse. Ca permet de copier le contenu d'un pointeur dans un autre comme ceci
char *pt1;
pt1 = "salut";
char *pt2
pt2 = &pt1;
Marsh Posté le 01-07-2005 à 23:59:05
Citation : je voudrais bien mais a ce moment la il affiche cecic lors de la compile |
Par curiosité, comment tu l'as écris ? Surement pas comme Taz.
Citation :
|
"char *pt1" donne :
pt1 => char *
pt1[indice] => char
&pt1 => char **
Marsh Posté le 02-07-2005 à 00:02:14
comme ca :
Code :
|
et j'ai aussi essayé comme ca
Code :
|
Marsh Posté le 02-07-2005 à 00:02:52
super-tupapau a écrit : euh j'ai rien compris pourrais tu etre plus claire |
C'est du déréférencement.
"char" = 1 byte.
"char *" = variable contenant l'adresse d'une zone mémoire, constituée d'un ou plusieurs char
"char **" = variable contenant l'adresse d'une zone mémoire, constituée d'un ou plusieurs "char *"
Et &pt1 correspond à un "char **" (adresse d'un "char *" ).
Marsh Posté le 02-07-2005 à 00:05:15
super-tupapau a écrit : comme ca :
|
C'est bien ce que je dis : pas comme Taz.
Il a mis des apostrophes dans ses tests type : algo[pos] == '+'
Il y a une bonne raison :
Marsh Posté le 02-07-2005 à 00:05:29
a ok j'ai un peu de mal ms cela ne résoud rien les & devant les pointeurs meme erreur de compil et un segment fault
Marsh Posté le 02-07-2005 à 00:06:39
j'ai deja essayé avec les apostrophe
Code :
|
tjr la meme chose
Marsh Posté le 02-07-2005 à 00:07:33
super-tupapau a écrit : et j'ai aussi essayé comme ca
|
Ouh la. Arrête d'essayer les combinaisons au hasard jusqu'à ce que ça "fonctionne".
Stoppe un coup, trouve un bon tutorial ou un bon bouquin de C (je te conseille "Le langage C" de Kernighan & Ritchie), et étudie un peu le tout avant de te lancer à corps perdu comme tu le fais.
EDIT :
Citation : j'ai deja essayé avec les apostrophe |
Apprends à lire aussi, ça pourra t'aider.
Marsh Posté le 02-07-2005 à 00:10:56
1. Ca fait longtemps que j'ai ce livre
2. J'ai dabord apris le C++ et j'ai jamais eu c probleme je pense etre dans un mauvais
3. Pourquoi dois-je apprendre a lire pour info un post et arrivé pdt que j'écrivais le précédent
Marsh Posté le 02-07-2005 à 00:12:40
super-tupapau a écrit : 1. Ca fait longtemps que j'ai ce livre |
Un livre n'est pas un cale-porte.
C'est le meilleur livre possible pour le C, tout y est parfaitement décris et détaillé, alors je pense que tu ne l'as pas lu.
Repars vers du plus simple, avec les exercices proposés dans le livre.
super-tupapau a écrit : 3. Pourquoi dois-je apprendre a lire pour info un post et arrivé pdt que j'écrivais le précédent |
Parce que Taz a donné l'info dès le début, et dans son test algo[pos]=='+', il n'a jamais mis de "&".
Marsh Posté le 02-07-2005 à 00:16:53
je sais qui n'a pas mit de & c'est juste que en fait le code que je vous ai donner est emputé d'une partie qui est pour l'instant inutile
ce pourquoi une petite erreur c'était mise à la ligne 27 "&alog[pos]" ensuite comme le dit mon titre je suis embrouillé dans ce qui est les pointeurs et je ne suis pas venu pour me fair chier dessus.
alors si tu pouvais evité les truc du genre
Citation : Un livre n'est pas un cale-porte. |
parce que ce livre il est sur mes genoux depuis une semaine et c pas la premiere fois que je l'ouvre
excuse pour le livre en fait moi j'ai le C++ de jesse liberty en papier et l'autre je l'ai sur un site
perso je prefere lire sur le papier c plus claire et j'ai pas tellemnt envie d'acheter un autre livre qui parle du C vu que j'ai deja le C++
Marsh Posté le 02-07-2005 à 00:23:12
Je ne suis pas en train de te chier dessus. Mais une question a été posée, une réponse a été donnée, mais soit tu as ignoré la réponse, soit tu as recopié de travers avec plein de combinaisons différentes.
C'est un peu frustrant pour ceux qui te répondent.
Marsh Posté le 02-07-2005 à 00:23:46
enfin c normal que ca soit le meilleur livre car il n'y pas mieux placer que les créateur du C pour parler du C
Marsh Posté le 02-07-2005 à 00:25:10
bon excuse pour mettre emporter
alors pourrais tu me remmontrer ta solution s'il te plait
Marsh Posté le 02-07-2005 à 00:28:10
pour la fustration je connais, j'aide les débutant sous linux, il y a rien de plus énervant
que de répéter trente fois la meme chose et que l'autre laisse finalement tomber et va voir ailleurs
Marsh Posté le 02-07-2005 à 00:28:36
j'en ai marre des débutants ! c'est pourtant pas compliqué. le C est statiquement typé, y a pas à réfléchir, il suffit de vérifier les types d'une expression, et on a déjà fait une bonne partie du travail.
Comment peux tu écrire ça &algo[pos]=='+' ....
Marsh Posté le 02-07-2005 à 00:32:31
je sais bien que c algo[pos]=='+' ms toi non plus tu sais pas lire
Citation : e sais qui n'a pas mit de & c'est juste que en fait le code que je vous ai donner est emputé d'une partie qui est pour l'instant inutile |
enfin ca fait trois ans que je programme ( et 2 ans en C) et je me considere plus (peut-etre ai-je tort) comme un débutant
Marsh Posté le 02-07-2005 à 00:34:37
ben à tort. T'es pas capable d'écrire une expression valide au niveaux de types. Et ton parcours de chaine est naz ... Et vive les dépassement s de capacités. Vive les switch. Vive const.
Sinon, on est tous perplexes devant le return de ta fonction.
Marsh Posté le 02-07-2005 à 00:35:59
super-tupapau a écrit : enfin ca fait trois ans que je programme ( et 2 ans en C) et je me considere plus (peut-etre ai-je tort) comme un débutant |
Uh huh... du C sans pointeur pendant 2 ans ?
Citation : Sinon, on est tous perplexes devant le return de ta fonction. |
J'avais même pas fait gaffe.
Marsh Posté le 02-07-2005 à 00:38:22
non quand meme pas c impossible de programmer en C sans pointeur (tu peux rien faire sans ca) mais j'ai évité le plus souvent possible les pointeurs avec des tableaux ( et crois moi c pas facile )
En général je trouver la solution s'en vraiment la comprendre. Mnt je veux le comprend comme ca je serais plus bloquer.
Marsh Posté le 02-07-2005 à 00:39:57
ben fie-toi aux types pour commencer.
parcours les chaines jusqu'à l' '\0'
Marsh Posté le 02-07-2005 à 00:41:56
pour le retour de la fonction je fait comme ca
Code :
|
Marsh Posté le 02-07-2005 à 00:42:58
result n'est pas initialisé. ton code est toujours archi faux.
Marsh Posté le 02-07-2005 à 00:45:39
je l'ai deja dit ce code est enputé
result sera inisialisé
Marsh Posté le 02-07-2005 à 00:53:35
merci beaucoup c tres sympa j'ai compris je vais voir ailleurs
Marsh Posté le 02-07-2005 à 00:56:41
ben si c'est pour pas prendre en compte ce qu'on t'as dit ...
t'as toujours pas réglé tes comparaisons entre caractères ni ceci
# // Copier l'entrée dans un tableau
# strcat(algo, entry);
#
# // Séparer les élément
# for(pos = 0; pos <150; pos++){
# .... algo[pos]
Marsh Posté le 02-07-2005 à 00:58:17
super-tupapau a écrit : merci beaucoup c tres sympa j'ai compris je vais voir ailleurs |
Si tu veux, mais je ne pense pas que ce soit différent ailleurs.
Ta fonction est censée faire quoi au fait ? Parce que j'ai essayé de la coder pour que tu aies un exemple, quand je me suis aperçu que ça partait en tout sens.
Marsh Posté le 02-07-2005 à 01:10:31
je pense que je mit prend mal en fait je l'ai dit au début c'est une calculette tous simple.
ce que je voulais faire c'est avec cette fonction récuper la chaine taper par l'utilisateur (elle est avant vérifier pour voir si il n'y a pas de faute de syntaxe) par exemple: 2+3/6 puis stocker dans deux tableaux de 150 characteres (150 étant le nombre maximum que l'utilisateur pouvait taper) les operateurs (+-/*) dans l'un et les nombres dans un autre. en gardant les position deux ceci par rapport a la chaine taper.
avec l'exemple ca donnerai dans le tableau de operateur 0, +, 0, /, 0, ... et le tableau des nombres 2, 0, 3, 0, 6,... si un nombre été superieur a dix ca macherai comme ceci (c pas tre propement ms bon) par exemple pour la chaine 23/7
tableau 1: 0, 0, /, 0, ....
tableau 2: 23,23,0,7, ... (deux nombre ne pouvant se suivre il seront considérer comme meme nombre dans le calcul)
enfin avec deux variable que j'appelerai registres (en reference a l'asm) je recopier un premier nombre dans le premier et le second dans le second et je prendrai l'operateur qui se trouve au milieu pour effectuer le calcul enfin je recommence jusque ce que la chaine ne soit plus qu'un nombre
je compte implémenter plus tard la priorité des operations
Marsh Posté le 02-07-2005 à 01:18:38
enfin vous pouver me dire que l'age n'a rien avoir mais j'ai regarder vos status et vous etes tous les deux des informaticiens qui on 20 ans ou 30 ans tandis moi j'en ai que 15 et j'ai tous appris tous seule avec des bouquin et en lisant du code source alors je pense que c'est deja pas si mal.
Marsh Posté le 02-07-2005 à 01:45:47
Je pense que tu démarres sur du trop compliqué pour commencer.
Tu devrais revoir tes objectifs, en procédant de la façon suivante :
Tu verras déjà qu'avec ça, tu auras un certain nombre de contrôle et de choses à faire qui te feront progresser.
Parce que là tu te lances dans quelque chose dont tu ne te sortiras pas, tel que tu es parti.
Marsh Posté le 02-07-2005 à 08:57:09
Page 78 du K&R, il y a une calculette polonaise inverse comme exemple.
Marsh Posté le 02-07-2005 à 10:40:48
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
2. on peut accèder à la valeur du pointeur (l'adresse qui contient et pas la valeur de cette adresse) en mettant & devant lui
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)
4. enfin le plus important on peut accèder à la valeur ou il pointe en mettent * devant lui.
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.
Marsh Posté le 02-07-2005 à 10:54:21
bon j'ai fait un programme d'essai pour voir si je controle bien les pointeurs:
Code :
|
ce qui me donne a l'execution
line : 10
*pLine : 10
&line : bffff874
pLine : bffff874
&pLine : bffff870
line : 15
*pLine : 15
Marsh Posté le 02-07-2005 à 11:12:18
merci ca rajoute 0x devant les adresse pour montrer que c'est de l'hexadecimal
line : e
*pLine : e
&line : 0xbffff877
pLine : 0xbffff877
&pLine : 0xbffff870
line : a
*pLine : a
sinon sa marche avec les variables char mais comme faire avec les chaines?
Marsh Posté le 01-07-2005 à 23:32:00
Voila je suis entraine de programmer pour m'exercer une petite calculatrice.
Le rôle du programme n'a que peut d'importance dans le probleme que je rencontre
voici mon code (il est incomplet car je n'avance plus depuis ce probleme)
j'ai donc un probleme de pointeur. pdt la compilation j'ai c avertisssement
algorithme.c: Dans la fonction « takotak_algo_new »:
algorithme.c:33: attention : passage de l'argument n°1 de « strcmp » transforme un entier en pointeur sans transtypage
algorithme.c:33: attention : passage de l'argument n°1 de « strcmp » transforme un entier en pointeur sans transtypage
algorithme.c:33: attention : passage de l'argument n°1 de « strcmp » transforme un entier en pointeur sans transtypage
algorithme.c:33: attention : passage de l'argument n°1 de « strcmp » transforme un entier en pointeur sans transtypage
le probleme eqt que je ne n'ai jamais vraiment bien maitriser les pointeur sur quand il s'agit de tableau ou je m'enbrouille tres rapide
le programme évidament produit un segment fault
je souhaiterais donc il explication la plus détail possible de l'utilisation des pointeurs en C ( si vous plait pas de liens vers des didactitiel ms une explication de vous )
Merci de votre aide