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

  FORUM HardWare.fr
  Programmation
  C

  Fonction qui modifie un char *

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction qui modifie un char *

n°1221765
multani
Dépressionnisé
Posté le 13-10-2005 à 08:32:12  profilanswer
 

Salut,
 
à force de faire des langages de script interprétés, j'en ai perdu mon C :/
Donc voilà le problème, j'ai besoin d'avoir une fonction a qui on passe une chaine de caractères, et que cette fonction modifie la chaine :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void pouet (char* string, int size) {
  4. int i;
  5. for (i = 0; i < size; i++) {
  6.  printf("-> %c\n", string[i]);
  7.  string[i] = 60; // par exemple hein
  8. }
  9. }
  10. int main (int argc, char *argv[]) {
  11. char* pouet_str = "pouetpouet";
  12. printf("%s\n", pouet_str);
  13. pouet(pouet_str, strlen(pouet_str));
  14. printf("%s\n", pouet_str);
  15. return 0;
  16. }


 
Voilà ce que ça me sort :

sh-3.00$ gcc -o test test.c  
sh-3.00$ ./test  
pouetpouet
-> p
Erreur de segmentation
sh-3.00$


 
Bref, ça segfault dès que j'essaie de modifier sintrg[i], et j'avoue ne pas comprendre pourquoi.
 
Si on pouvait m'expliquer [:romf]

mood
Publicité
Posté le 13-10-2005 à 08:32:12  profilanswer
 

n°1221797
theshockwa​ve
I work at a firm named Koslow
Posté le 13-10-2005 à 09:48:39  profilanswer
 

ton char * pointe sur une zone mémoire sur lesquelles tu n'as pas les droits en écriture ?

n°1221817
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-10-2005 à 10:06:42  profilanswer
 

multani a écrit :


Donc voilà le problème, j'ai besoin d'avoir une fonction a qui on passe une chaine de caractères, et que cette fonction modifie la chaine :

int main (int argc, char *argv[])  
{
 char* pouet_str = "pouetpouet";
 return 0;
}


Voilà ce que ça me sort :

sh-3.00$ gcc -o test test.c  
sh-3.00$ ./test  
pouetpouet
-> p
Erreur de segmentation
sh-3.00$


 
Bref, ça segfault dès que j'essaie de modifier sintrg[i], et j'avoue ne pas comprendre pourquoi.


Le langage C ne garanti pas qu'une chaine de caractère littérale soit modifiable. Tenter de la modifier invoque un comportement indéfini. En d'autres termes, c'est un bug.

char* pouet_str = "pouetpouet";


devrait plutôt s'écrire

char const * pouet_str = "pouetpouet";


ce qui permet au compilateur de générer au moins des avertissements...
 
Si tu veux modifier la chaine, il faut utiliser un tableau de char.

char pouet_str[] = "pouetpouet";



---------------
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°1221838
multani
Dépressionnisé
Posté le 13-10-2005 à 10:41:26  profilanswer
 

Emmanuel Delahaye a écrit :

Le langage C ne garanti pas qu'une chaine de caractère littérale soit modifiable. Tenter de la modifier invoque un comportement indéfini. En d'autres termes, c'est un bug.

char* pouet_str = "pouetpouet";


devrait plutôt s'écrire

char const * pouet_str = "pouetpouet";


ce qui permet au compilateur de générer au moins des avertissements...


D'accord, le compilateur prends la chaine comme un const alors. Je pensais à un truc du genre, mais j'étais pas sur :jap:

Emmanuel Delahaye a écrit :


Si tu veux modifier la chaine, il faut utiliser un tableau de char.

char pouet_str[] = "pouetpouet";



J'avais vu quand passant un tableau de char, ça marchait mieux effectivement.
 
Ok, merci de la précision, je vais pouvoir me démerder maintenant :jap:

n°1223211
ptc07
On est dans le K K .....
Posté le 14-10-2005 à 15:34:56  profilanswer
 

et un ptit malloc sur le char * avant d'écrire dedans ?  

n°1223230
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-10-2005 à 15:40:57  profilanswer
 

ptc07 a écrit :

et un ptit malloc sur le char * avant d'écrire dedans ?

Oui, on peut toujours faire plus compliqué...
 


---------------
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°1223233
ptc07
On est dans le K K .....
Posté le 14-10-2005 à 15:41:51  profilanswer
 
n°1223237
multani
Dépressionnisé
Posté le 14-10-2005 à 15:42:45  profilanswer
 

ptc07 a écrit :

et un ptit malloc sur le char * avant d'écrire dedans ?


 
Oui, j'ai testé, et ça marche aussi :)


Message édité par multani le 14-10-2005 à 15:43:10
n°1223369
Elmoricq
Modérateur
Posté le 14-10-2005 à 16:41:59  profilanswer
 


 
Rapport entre memset() et le problème présent ?  [:atlantis]

n°1223407
multani
Dépressionnisé
Posté le 14-10-2005 à 16:59:03  profilanswer
 

Elmoricq a écrit :

Rapport entre memset() et le problème présent ?  [:atlantis]


Pour faire encore plus compliqué ? [:petrus75]


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

  Fonction qui modifie un char *

 

Sujets relatifs
[Probleme] Pointeurs de fonction dans une mapFonction MySQL désapprouvé
[C++] pbl d'appel de fonctionfonction qui retourne nb jours entre 2 dates
fonction mail ?fonction "trier par" dans une liste
Problème envoi mail avec fonction mail() [Résolu]fonction pour recuperer un chiffre d'une chaine [Résolu]
Lancer une fonction php en cliquant sur un boutonprobleme minute: fonction chaine en php
Plus de sujets relatifs à : Fonction qui modifie un char *


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