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

 


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

les pointeurs , les tableaux ??? je mis perd

n°1138509
super-tupa​pau
Posté le 03-07-2005 à 10:27:10  profilanswer
 

Reprise du message précédent :

Citation :

C'est assez élémentaire. On construit une chaine à partir d'un caractère.
En string[0] on met le caractère, et en string[1], on met un 0, ce qui fait que string devient une chaine valide. Elle peut donc être 'passée' à strcat().  


 
oui ca j'avais comprit mais qu'elle est le rapport avec mon probleme

mood
Publicité
Posté le 03-07-2005 à 10:27:10  profilanswer
 

n°1138510
super-tupa​pau
Posté le 03-07-2005 à 10:34:19  profilanswer
 

Bon de toute facons c'est pas grave je m'ai ce projet dans un coin je verais plutard quand j'aurais lu le livre

n°1138571
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 13:31:25  profilanswer
 

super-tupapau a écrit :

j'ai du mal m'exprime depuis le debut jeprogramme depuis deux 1/2 (si le html et la javascript et un langage) ans (1 ans de prog web (php ... mysql) ) et 1 ans de C++ mais aussi du reste comme un peu de java sa dépend des projet enfait j'ai appronfondie aucun langage a part ce du web et je comme a approndir le C ms vu comment je suis accueil je pense pas continuer


 
A ce que je vois, il n'y a pas que les langages de programmation que tu n'as pas approfondis... Si tu massacres ces langages comme tu massacres le français, tu vas avoir du mal...


Message édité par Emmanuel Delahaye le 03-07-2005 à 13:36:45

---------------
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°1138574
Taz
bisounours-codeur
Posté le 03-07-2005 à 13:35:28  profilanswer
 

il manque pas un s à 'approfondi' ?

n°1138575
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 13:36:01  profilanswer
 

super-tupapau a écrit :

Citation :

C'est assez élémentaire. On construit une chaine à partir d'un caractère.
En string[0] on met le caractère, et en string[1], on met un 0, ce qui fait que string devient une chaine valide. Elle peut donc être 'passée' à strcat().  


 
oui ca j'avais comprit mais qu'elle est le rapport avec mon probleme


Je répond à une question que tu as posé. Je suppose que tu sais pourquoi tu as posé la question...


---------------
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°1138576
Elmoricq
Modérateur
Posté le 03-07-2005 à 13:36:10  profilanswer
 

Taz a écrit :

il manque pas un s à 'approfondi' ?


 
Non, participe passé (mets-le au féminin pour être sûr  :o ).

n°1138577
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 13:37:16  profilanswer
 

Taz a écrit :

il manque pas un s à 'approfondi' ?

Si, mais là, on entre dans le subtil...


---------------
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°1138578
Taz
bisounours-codeur
Posté le 03-07-2005 à 13:37:49  profilanswer
 

ben oui, mais le COD, il est devant le verbe

n°1138580
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 13:39:36  profilanswer
 

Elmoricq a écrit :

Non, participe passé (mets-le au féminin pour être sûr  :o ).


Oui, mais accord avec le COD placé avant ('que' qui représente 'ces langages')  
 
('ces langues' ... 'approfondies')


---------------
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°1138581
Elmoricq
Modérateur
Posté le 03-07-2005 à 13:40:49  profilanswer
 

Taz a écrit :

ben oui, mais le COD, il est devant le verbe


 
Je n'avais pas fait attention au pronom relatif. Bien vu.  [:klem3i1]

mood
Publicité
Posté le 03-07-2005 à 13:40:49  profilanswer
 

n°1138595
super-tupa​pau
Posté le 03-07-2005 à 14:12:28  profilanswer
 

:hello: bravo pour le hors-sujet

n°1138866
super-tupa​pau
Posté le 03-07-2005 à 22:40:32  profilanswer
 

voila el muchacho j'ai fait ton exo 1:
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main(int argc, char ** argv){
  4. // Déclaration est inisialisation
  5. char *p = malloc(sizeof(char));
  6. // Récuperé la chaine de 10 caractères écrit par l'utilisateur
  7. printf("Chaine# " );
  8. gets( p );
  9. printf("Chaine %p: %s\n", &p,p);
  10. return 0;
  11. }


 
rq: GCC précise qu'il n'est pas recommandé d'utiliser gets je suppose donc qu'il y a une fonction plus approprié.
 
et l'exercice 2:
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. // Déclaration de la fonction display
  4. void display( char *str ){
  5. printf("Chaine %p: %s\n", &str, str);
  6. }
  7. int main(int argc, char ** argv){
  8. // Déclaration est inisialisation
  9. char *p = malloc(sizeof(char));
  10. // Récuperé la chaine de 10 caractères écrit par l'utilisateur
  11. printf("Chaine# " );
  12. gets( p );
  13. // Appel de la fonction d'affichage
  14. display( p );
  15. // Demander l'effacement de l'espace alloué
  16. free(p);
  17. return 0;
  18. }


 
même les remarques de Taz sont les bienvenues  :)  
 
voila dit moi si c'est correct


Message édité par super-tupapau le 03-07-2005 à 22:47:43
n°1138877
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 22:46:36  profilanswer
 

super-tupapau a écrit :


<snip>rq: GCC précise qu'il n'est pas recommandé d'utiliser gets je suppose donc qu'il y a une fonction plus approprié.


Oui :
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
Ton code commenté...
 


#include <stdlib.h>
#include <stdio.h>
 
/* -ed- parametres non utilises... */
int main(int argc, char ** argv){
 
// Déclaration est inisialisation
/* -ed- sizeof (char) vaut 1 par definition. Avec une chaine de 1 char, on ne sait rien faire d'autre qu'une chaine vide. */
char *p = malloc(sizeof(char));
 
// Récuperé la chaine de 10 caractères écrit par l'utilisateur
printf("Chaine# " );
/* -ed- Ne pas utiliser gets(). Trou de securite bien connu */
gets( p );
 
/* -ed- Pourquoi &p ? Tu es interesse par l'adresse de p ? C'est une bete variable locale... */
printf("Chaine %p: %s\n", &p,p);
 
/* -ed- l'espace alloue' n'est pas libere...  */
return 0;
}


Citation :

et l'exercice 2:


Tu vas trop vite. Corrige déjà le 1... Ouvre ton livre de C et renseigne toi sur ce qu'est une chaine en C...


Message édité par Emmanuel Delahaye le 03-07-2005 à 22:49:29

---------------
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°1138881
super-tupa​pau
Posté le 03-07-2005 à 22:53:16  profilanswer
 

Citation :

/* -ed- l'espace alloue' n'est pas libere...  */


 
j'ai completement oublier mais je me suis rattraper dans l'exercice deux avec free()  :D  
 
Pour gets j'ai un livre de programmation systeme en C alors je vais voir ca mais merci pour les liens
 
Enfin le &p c juste pour le plaisir
 

Citation :

/* -ed- sizeof (char) vaut 1 par definition. Avec une chaine de 1 char, on ne sait rien faire d'autre qu'une chaine vide. */


oui donc si je fait par exemple malloc(10*sizeof(char)) je fait une chaine de 9 charactères + le caractère /0 mais si je fait ca gets ne génére pas de segment fault si je dépasse 9 caractères ? pourqoi?
 
et mon livre de C est dans le circuit de la poste pour l'instant


Message édité par super-tupapau le 03-07-2005 à 22:54:43
n°1138884
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:08:44  profilanswer
 

super-tupapau a écrit :

mais si je fait ca gets ne génére pas de segment fault si je dépasse 9 caractères ? pourqoi?


 
Coup de bol.  
 
C'est le propre du comportement indéfini : parfois ça passe, parfois ça fait n'importe quoi, parfois ça plante.
C'est la roulette (russe).


Message édité par Elmoricq le 03-07-2005 à 23:08:56
n°1138887
super-tupa​pau
Posté le 03-07-2005 à 23:09:42  profilanswer
 

voila la correction
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define _P_SIZE 64
  4. int main(int argc, char ** argv){
  5. // Déclaration est inisialisation
  6. char *p = malloc(_P_SIZE);
  7. // Récuperé la chaine de 10 caractères écrit par l'utilisateur
  8. printf("Chaine# " );
  9. fgets( p, _P_SIZE, stdin );
  10. printf("Chaine %p: %s", &p,p);
  11. free(p);
  12. return 0;
  13. }


 
l'espace alloué est bien libéré par free();
j'alloue 64 octets qui correspond à 63 caractères plus le caractère \n
et j'utilise fgets pour afficher la chaine qui ne dépasse plus la taille de l'espace alloué

n°1138888
super-tupa​pau
Posté le 03-07-2005 à 23:11:49  profilanswer
 

Citation :

C'est le propre du comportement indéfini : parfois ça passe, parfois ça fait n'importe quoi, parfois ça plante.
C'est la roulette (russe).


 
J'ai bcp de bol alors mais je préfére utiliser fgets de toute facon si GCC lui meme précise que cette fonction ne doit pas etre utilisé c'est qu'elle est dépassé.

n°1138890
chrisbk
-
Posté le 03-07-2005 à 23:12:40  profilanswer
 

tu bricoles tjs avec ton &p dans ton printf

n°1138891
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 23:14:02  profilanswer
 

super-tupapau a écrit :


Pour gets j'ai un livre de programmation systeme en C alors je vais voir ca mais merci pour les liens


Rien à voir avec la programmation système. Il s'agit de code standard utilisateur...

Citation :


Citation :

/* -ed- sizeof (char) vaut 1 par definition. Avec une chaine de 1 char, on ne sait rien faire d'autre qu'une chaine vide. */


oui donc si je fait par exemple malloc(10*sizeof(char)) je fait une chaine de 9 charactères + le caractère /0 mais si je fait ca gets ne génére pas de segment fault si je dépasse 9 caractères ? pourqoi?


Parce que le comportement est indéfini (Undefined Behaviour ou UB). Il peut arriver n'importe quoi y compris un comportement d'apparence normal.
 
C'est ce qui fait qu'un UB est un bug redoutable. Il n'est pas detectable de façon formelle à l'exécution (ou produire un crash tel qu'on ne saura pas d'où il vient...). Il peut être detecté par le compilateur au moment de l'analyse de code, mais pas dans tous les cas. Seul un contrôle visuel par une personne ayant une bonne connaissance du langage peut détecter les UB.


---------------
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°1138892
super-tupa​pau
Posté le 03-07-2005 à 23:14:04  profilanswer
 

si vous y tener je l'enleve il sert a rien dans ce ca.
 

Code :
  1. printf("Chaine: %s", p);

n°1138893
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:15:34  profilanswer
 

super-tupapau a écrit :

voila la correction
 

Code :
  1. ...



 
C'est pas mal du tout.
 
Deux petites remarques :  

  • _P_SIZE ne devrait pas s'appeler ainsi, en fait les noms commençant par '_' sont réservés.  


  • les paramètres de main() permettent de récupérer les arguments donnés à ton programme en ligne de commande (en gros, les options).

Puisque tu n'en utilises pas, le prototype "int main(int, char * const *)" est superflu, tu peux utiliser l'autre prototype valable :

Code :
  1. int main(void) {


 
 
 
 

super-tupapau a écrit :

j'alloue 64 octets qui correspond à 63 caractères plus le caractère \n


 
Non : au maximum 63 bytes + le caractère de fin de chaîne '\0'.
Ca peut aussi être une chaîne de n bytes + '\0' + (63 - n) bytes qui correspondent à n'importe quoi (et qui ne seront pas lus grace au '\0' terminal).
Exemple :
 


0  1  2  3  4  5  6  7  8   9 ........... 63
m  a  c  h  a  i  n  e  \n \0 n'importe quoi


Message édité par Elmoricq le 03-07-2005 à 23:22:58
n°1138894
chrisbk
-
Posté le 03-07-2005 à 23:16:18  profilanswer
 

Emmanuel Delahaye a écrit :


C'est ce qui fait qu'un UB est un bug redoutable. Il n'est pas detectable de façon formelle à l'exécution (ou produire un crash tel qu'on ne saura pas d'où il vient...).


 
j'appuie ce point, j'ai deja eu des plantages lors de l'appel d'un malloc parce que 3 so avant moi un jeanjean faisait le pitre en mémoire. Retrouver ce genre de bug, c'est le pied complet

n°1138897
super-tupa​pau
Posté le 03-07-2005 à 23:18:38  profilanswer
 

: warning: the `gets' function is dangerous and should not be used.
 
c'est pour ca que les programmeurs de GCC très attentionnels l'on précisés
 
sinon pour le livre de programmation système en C c'est le seul livre que j'ai (puisque K&R est pas encore arrivé) qui traite un petit peu de la librairie C au début. Mon livre C++ n'en parle évidament pas.

n°1138899
chrisbk
-
Posté le 03-07-2005 à 23:20:40  profilanswer
 

super-tupapau a écrit :


c'est pour ca que les programmeurs de GCC très attentionnels l'on précisés


 
oué, on les félicite d'ailleurs d'avoir reussi a produire un autre message d'erreur que "syntax error", de leur part c'est une performance


Message édité par chrisbk le 03-07-2005 à 23:20:53
n°1138900
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:21:31  profilanswer
 

chrisbk a écrit :

oué, on les félicité d'ailleurs d'avoir reussi a produire un autre message d'erreur que "syntax error", de leur part c'est une performance


 
[:al zheimer]
Traumatisé par la 2.95 ?  :D

n°1138901
el muchach​o
Comfortably Numb
Posté le 03-07-2005 à 23:21:59  profilanswer
 

Ok, c'est un bon début. Reste que la chaine se termine par 0 et non par \n.
 
Tu peux corriger l'exercice 2 et le modifier pour en faire un chiffre de César.
Tu devras faire une fonction "encode" et une fonction "decode". C'est pas très compliqué.
Le main lit la chaine, appelle la fonction "encode", l'affiche, appelle "decode" et affiche. Evidemment, la chaine decodee doit être identique à la chaîne d'origine.

n°1138902
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 23:22:36  profilanswer
 

super-tupapau a écrit :

voila la correction



#include <stdlib.h>
#include <stdio.h>
 
/* -ed- les identificateurs commenant par _[_A-Z] sont reserves a l'implementation.  
 * En tant qu'utilisateur, tu n'as pas le droit de les utiliser. */
#define _P_SIZE 64
 
int main(int argc, char ** argv){
 
// Déclaration est inisialisation
/* -ed- 'definition et initialisation' ...  Tu es limite comprehensible... */
char *p = malloc(_P_SIZE);
 
// Récuperé la chaine de 10 caractères écrit par l'utilisateur
printf("Chaine# " );
/* -ed- Ajouter fflush(stdout); pour etre sur que le texte sorte bien au moment voulu  
 
http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
 
tu peux lire tous les articles.  
 
http://mapage.noos.fr/emdel/notes.htm
 
Ca evitera le code naif...
 
 */
fgets( p, _P_SIZE, stdin );
 
/* -ed- Ok, mais attention, fgets() prend aussi le '\n' quand il y a la place...  
 * Ca peut etre genant ou non...  
 */
printf("Chaine %p: %s", &p,p);
 
free(p);
 
return 0;
}


Citation :

l'espace alloué est bien libéré par free();


Ok.

Citation :

j'alloue 64 octets qui correspond à 63 caractères plus le caractère \n


Et le 0 ?

Citation :

et j'utilise fgets pour afficher la chaine qui ne dépasse plus la taille de l'espace alloué


Jamais tu te relis ?


---------------
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°1138903
super-tupa​pau
Posté le 03-07-2005 à 23:22:50  profilanswer
 

C'est vrai que parfois GCC il donne des messages vraiment pas précis ou il donne pas le bon numéro de la ligne ou il y a l'erreur
(j'exclu l'erreur du point-virgule à la fin des intructions)

n°1138904
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:24:01  profilanswer
 

la chaine, c'est p, pas &p. et puis l'allocation dynamique d'une taille statique ...

n°1138905
chrisbk
-
Posté le 03-07-2005 à 23:24:09  profilanswer
 

Elmoricq a écrit :

[:al zheimer]
Traumatisé par la 2.95 ?  :D


bin les gcc 3.3.x que j'ai utilisé sont aussi peu verbeux que la 2.95 (du syntax error pour tout ce qui passe), mais ont en plus le travers d'etre a moitié traduit, genre des machin.cpp : Erreur : syntax error avant le caractere '::' ou autre niaiseries du meme tonneau :d
 
zont du boulot de ce coté la, le compilo a VS produit genrralement des messages bcp plus clairs et ciblés

n°1138907
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:25:10  profilanswer
 

chrisbk a écrit :


 
zont du boulot de ce coté la, le compilo a VS produit genrralement des messages bcp plus clairs et ciblés


et alors ? ça finit toujours pas un bleu bite qui débarque "Help, VS plante, Erreur 6756432578245" :)

n°1138908
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:25:38  profilanswer
 

chrisbk a écrit :

bin les gcc 3.3.x que j'ai utilisé sont aussi peu verbeux que la 2.95 (du syntax error pour tout ce qui passe), mais ont en plus le travers d'etre a moitié traduit, genre des machin.cpp : Erreur : syntax error avant le caractere '::' ou autre niaiseries du meme tonneau :d


 
C'est zarb', je me souviens pas de ces "syntax error".  :heink:  
J'ai peut-être pas fait attention.
 
Et j'ai aucune traduction par contre, ce que je trouve mieux qu'une moitié de traduction.

n°1138910
super-tupa​pau
Posté le 03-07-2005 à 23:26:56  profilanswer
 

Citation :


Citation : j'alloue 64 octets qui correspond à 63 caractères plus le caractère \n
 
Et le 0 ?  


 
je voulais dire \0 au lieu de \n
 

Citation :


/* -ed- Ok, mais attention, fgets() prend aussi le '\n' quand il y a la place...  
 * Ca peut etre genant ou non...  
 */  


 
Ca je vois pas comment l'empecher de le faire

n°1138911
el muchach​o
Comfortably Numb
Posté le 03-07-2005 à 23:27:12  profilanswer
 

Bon chrisbk et Taz, merci d'arrêter de polluer avec du HS.

n°1138912
chrisbk
-
Posté le 03-07-2005 à 23:27:31  profilanswer
 

Taz a écrit :

et alors ? ça finit toujours pas un bleu bite qui débarque "Help, VS plante, Erreur 6756432578245" :)


 
n'importe quoi.

n°1138913
chrisbk
-
Posté le 03-07-2005 à 23:28:42  profilanswer
 

Elmoricq a écrit :

C'est zarb', je me souviens pas de ces "syntax error".  :heink:  
J'ai peut-être pas fait attention.


 
bin truc idiot. utilise un type non déclaré, il va te pondre une syntax error au lieu de te dire "bah ton type, jle connais pas". C'est crétin, mais c'est comme ca pour bcp de chose

Elmoricq a écrit :


Et j'ai aucune traduction par contre, ce que je trouve mieux qu'une moitié de traduction.


 
chui bien d'accord la dessus (surtou les traducs ou "this" est traduit par "cet", bonjour le tableau)

n°1138915
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:28:48  profilanswer
 

chrisbk a écrit :

n'importe quoi.


ben si, c'est l'autre variante du mec qui donne pas son code et se plaint d'une erreur à la ligne 63.

n°1138916
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 23:28:55  profilanswer
 

super-tupapau a écrit :

Citation :


/* -ed- Ok, mais attention, fgets() prend aussi le '\n' quand il y a la place...  
 * Ca peut etre genant ou non...  
 */  


 
Ca je vois pas comment l'empecher de le faire


 
Tu ne peux pas l'empécher, et, au contraire, il faut en tirer parti comme je l'ai expliqué dans mes articles...


---------------
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°1138917
super-tupa​pau
Posté le 03-07-2005 à 23:29:12  profilanswer
 

Citation :

bin les gcc 3.3.x que j'ai utilisé sont aussi peu verbeux que la 2.95 (du syntax error pour tout ce qui passe), mais ont en plus le travers d'etre a moitié traduit, genre des machin.cpp : Erreur : syntax error avant le caractere '::' ou autre niaiseries du meme tonneau :d


 
C'est pour ca que je prend d'habitude la version anglaise c'est plus simple a traduit malheureusement gcc en fr avec ubuntu

n°1138918
chrisbk
-
Posté le 03-07-2005 à 23:29:20  profilanswer
 

Taz a écrit :

ben si, c'est l'autre variante du mec qui donne pas son code et se plaint d'une erreur à la ligne 63.


 
oué enfin ca n'a rien a voir avec mon propos

n°1138921
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:32:26  profilanswer
 

chrisbk a écrit :

bin truc idiot. utilise un type non déclaré, il va te pondre une syntax error au lieu de te dire "bah ton type, jle connais pas". C'est crétin, mais c'est comme ca pour bcp de chose


 
Je regarde ça demain (j'ai pas de 2.95 chez moi  :o  )

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