CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

retour de char* foireux??

caelacanthe
caelacanthe
Niveau 10
18 septembre 2007 à 12:42:32

:salut:

j´essaye de faire une fonction en c-c++ qui prend en paramètre une chaine de caractères, travaille dessus et en retourne une autre... le blème c´est que ca marche pas :non2:

même d´écrire ca:

  1. include<iostream>
  2. include<stdlib.h>
  3. include<stdio.h>

using namespace std;
char* traitement(char* chaine){
return chaine;
}
int main(){
char* res;
res=traitement("salut");
cout<<res;
}

ca compile mais quand je lance l´executable, ils mettent "machin.exe has stopped working" :hum:

ce n´est pas devcpp sous windows vista business version anglaise, le problème :question:
:merci:

godrik
godrik
Niveau 30
18 septembre 2007 à 14:05:08

heu... ca devrait marcher cela.
Peux tu nous en dire plus sur ton installation ? (os, compilateur)

caelacanthe
caelacanthe
Niveau 10
18 septembre 2007 à 14:25:00

ca marche sous debian v4.0 etch pourtant :question:

il faut que je reessaye sous vista, c´est peut-être l´origine du problème :doute:

Fvirtman
Fvirtman
Niveau 10
18 septembre 2007 à 14:51:59

Bizarre, ça devrait marcher, meme si je trouve ce genre de pratique ultra crade :
Finalement, tu renvoie l´adresse d´une chaine statique passée en parametre directement dans le code...

Moi je trouve ça moche.
Trace au debuggueur pour voir, déja, ou ça plante exactement !
met un system("pause"); ou un getchar a la fin : pour voir aussi si tu n´as pas terminé ton programme.

caelacanthe
caelacanthe
Niveau 10
18 septembre 2007 à 15:54:36

attendez, je me suis trompé de programme :rouge:

c´est celui-ci qui ne marche pas :noel:

  1. include<iostream>
  2. include<stdio.h>
  3. include<stdlib.h>

using namespace std;
char* machin(char* entree){
return entree;
}
int main(){
char* res=NULL;
char* donnee="salut";
cin>>donnee;
res=machin(donnee);
cout<<res;
}
il a apparament horreur des chaines de caractère passées en paramètres :hum:

comment je pourrais faire marcher ce petit programme? :question: :svp:

caelacanthe
caelacanthe
Niveau 10
18 septembre 2007 à 15:59:31

char* donnee="salut";
cin>>donnee;

mais comment fais-je pour écrire des trucs pareils :ouch2:

en tout cas, avec le cin>>donnee; il me fait une erreur de segmentation, sous debian... le problème vient de là et je ne vois pas comment le régler :peur:

dnob700
dnob700
Niveau 10
18 septembre 2007 à 21:46:02

char donnee[255];
cin >> donnee;

pour commençer. Comme ça, tu aura une chaîne suffisament longue pour y mettre des gros mots.

quand tu as donnee = "salut", donnee pointe vers un emplacement de la mémoire qui n´est peut-être pas accessible en écriture (quoi qu´il devrait l´être je pense). Mais le compilo peut faire pas mal de truc, par exemple, si tu écrit :
char* donnee1 = "salut";
char* donnee2 = "salut";
S´il optimise un peu trop, tu peut avoir donnee1 == donnee2 ce qui n´est pas ce à quoi tu t´attend. Donc il faut faire gaffe avec les chaîne statique dans le code comme le dit fvirtman.

caelacanthe
caelacanthe
Niveau 10
19 septembre 2007 à 12:41:25

il faut donc que je mette une limite a la chaîne... d´accord :ok:

Fvirtman
Fvirtman
Niveau 10
19 septembre 2007 à 13:24:06

/mode serieux :

char* donnee="salut";
cin>>donnee;

ça, ça risque de te poser probleme, car la chaine est initialisée directement dans le code : en général quand on fait cela, c´est pour ne surtout pas modifier cette chaine ! De plus, cette chaine est initialisée et allouée a la taille du mot "salut" -> petit mot quand meme, donc un mot un peu plus grand, et paf !

Dnob a raison :
char donnee[255];

te permettra d´avoir une bonne place pour stocker tes mots. le cin n´est pas "secure" donc si tu tapes un mot de + de 254 lettres (car le \0 est la derniere lettre), tu rends le programme instable (et risque de plantage aléatoire)

Tu as des méthodes + "secure" comme cin.getline, qui, en outre, acceptera les phrases avec des espaces, contrairement a cin tronque ta phrase des le premier espace.

/mode troll
"Comme ça, tu aura une chaîne suffisament longue pour y mettre des gros mots"
--> Tres juste, j´ai essayé avec la phrase suivante :

"Merde, putain, chier, bordel, chiotte"

(une phrase pleine de gros mots)

et ça marche !!

:dehors:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment