|
Bas de page | |
---|---|
Auteur | Sujet : Plantage: strchr() avec un char ** |
Publicité | Posté le 24-11-2007 à 10:57:42 |
matafan | "&mot" c'est la même chose que "mot", et c'est l'adresse du premier élément du tableau. C'est assimilable à un char *, pas à un char **.
Message cité 1 fois Message édité par matafan le 24-11-2007 à 12:05:44 |
olivthill | Voici une version qui devrait mieux marcher :
|
ngkreator |
L'adresse du 1er élément du tableau ne serait-ce pas plutôt: &mot[0] ou mot tout court? Pour moi &mot c'est l'adresse de l'emplacement du pointeur mot. Ce qui serait équivalant à faire:
Je ne comprend pas en fait là.
Oui bien sûr que ça marche. Tu as contourné le problème en le simplifiant. Message cité 2 fois Message édité par ngkreator le 24-11-2007 à 12:59:15 |
ngkreator | Sinon voilà la vraie fonction:
Message édité par ngkreator le 24-11-2007 à 12:24:27 |
olivthill | Voici un exemple utilisant nettoyer_chaine()
|
olivthill | Pour enlever le "\n" de fin de chaine, la fonction nettoyer_chaine() serait avantagement remplacée par
L'avantage est qu'il n'y a pas d'appel au realloc() qui est très lourd en ressources. En plus cette fonction enlève aussi les '\r' et les espaces en fin de chaine. Message cité 1 fois Message édité par olivthill le 24-11-2007 à 13:34:19 |
ngkreator |
Message édité par ngkreator le 24-11-2007 à 14:29:57 |
olivthill | Je pense que realloc plante car il ne marche que si la chaine a été allouée précedemment par malloc ou par une fonction du même genre. Or dans l'exemple, la chaine n'est pas allouée, elle est définie sur la pile.
|
matafan |
|
Publicité | Posté le 24-11-2007 à 17:20:22 |
ngkreator |
Je veux bien vous croire Que faire alors?
J'ai de gros doutes là dessus. Surtout pour: &pointeur = pointeur
Message cité 1 fois Message édité par ngkreator le 24-11-2007 à 17:46:17 |
matafan |
|
ngkreator |
|
matafan | char *pointer = "bonjour" : pointeur
|
Emmanuel Delahaye C is a sharp tool |
--------------- 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/ |
ngkreator | Après vos 2 derniers posts je viens d'apprendre qu'on appelle tableau un pointeur constant. Je ne savait pas que: type tab[] équivalait à type *const tab
Message édité par ngkreator le 25-11-2007 à 10:03:29 |
Emmanuel Delahaye C is a sharp tool |
Ca n'a aucun intérêt de raccourcir une chaine. Suite au 'nettoyage' d'une chaine modifiable, le 0 final se trouve placé à un endroit tel que la longueur de la chaine est modifiée (vérifible avec strlen()). Par contren, la taile du tableau de char est inchangée et oui, quelques byes sont inutilisables. C'est grave ? Mais si tu y tiens, elle doit être allouée dynamiquement (tableau de char : malloc()), initialisée, puis nettoyée et enfin modifiée avec realloc(). Il ne faut lancer ce mécanisme que si ça vaut vraiment le coup (gagner des dizaines de bytes). Si c'est pour gagner 4 bytes, c'est pas la peine... D'ailleurs, il vaut mieux raisonner en, %. En dessous de 20% de gain, je dirais qu'on perd son temps... Ton code est incomplet :
Message édité par Emmanuel Delahaye le 25-11-2007 à 11:39:59 --------------- 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/ |
ngkreator | Ah mais j'ai oublié string.h! Je fais toujours des erreurs à la con. Ca marche avec. Merci
Message cité 2 fois Message édité par ngkreator le 25-11-2007 à 10:40:21 |
matafan |
"&tableau == tableau" parce que c'est comme ça, c'est deux notations (avec ou sans le & ) pour désigner la même chose, à savoir l'adresse du premier élément. C'est le C, c'est comme ça et on n'y peut rien.
|
ngkreator |
Message édité par ngkreator le 25-11-2007 à 11:20:53 |
Emmanuel Delahaye C is a sharp tool |
--------------- 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/ |
Emmanuel Delahaye C is a sharp tool |
En effet, pout un tableau a de type T et de taille N, a est de type T* (adresse d'un élément), alors que &a est de type (T*)[N] (adresse d'un tableau) Ca change tout si on utilise l'arithmétique des pointeurs :
Message édité par Emmanuel Delahaye le 25-11-2007 à 11:51:40 --------------- 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/ |
ngkreator |
J'ai dit n'importe quoi. J'imaginais que dans une boucle les octets inutilement réservés à la chaine allaient s'accumuler. C'est faux.
Message édité par ngkreator le 25-11-2007 à 12:25:23 |
ngkreator | C'est super les warnings! On est carrément assisté avec tous ces warnings. Mais d'un coté ça m'a aidé à résoudre un problème qui me bloquait depuis hier. A savoir une variable compteur non initialisée à 0 Je fais vraiment des erreurs à la con!
Message édité par ngkreator le 25-11-2007 à 12:36:03 |
matafan | Merci pour le commentaire sur le type de "array" et "&array", ça m'échappait. En fait ça explique pourquoi array et &array ont la même valeur. C'est pas arbitraire, il y a une raison la dessous, tout est logique |
Publicité | Posté le |
Sujets relatifs | |
---|---|
[VC++] Plantage de rand() sous win2000 | plantage easy php sous vista |
Problème de conversion string en const char * | Plantage Apache génère des doublons |
[DB2] extraire un nombre packé d'un CHAR | Parcours alphabétique d'une map<char,XXX> sans la casse |
appel d'une fonction (execution) qui est definie par un char[] | Avoir la liste de toutes les fonctions PHP + plantage WAMP |
xmldom et plantage sous ie [Resolu] | Problème de type: Pixel =int, char ? |
Plus de sujets relatifs à : Plantage: strchr() avec un char ** |