1

Je suis en C++, j'ai un objet qui a un attribut de type "CHAINE" et une méthode qui fait un sprintf d'un entier quelconque dans cette chaine.

Du coup, j'ai implémenté l'attribut en char* - ce qui me retourne en segfault.
Par contre si je l'implémente en char[] ça marche impecc.

En gros:

class Bidule{
private:
char* chaine;
public:
inline void intToChaine(int n){sprintf(chaine,"%i",n);}

};


ne marche pas, mais:

class Bidule{
private:
char chaine[];
public:
inline void intToChaine(int n){sprintf(chaine,"%i",n);}

};


marche.







Je ne comprends pas, c'est pas censé être la même chose?
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

2

Ah et oui: si par contre ma méthode ressemble à ça:

void intToChaine(int n){

char* chaine;
sprintf(chaine,"%i",n);

}


Ca marche. Un truc m'échappe.
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

3

Ça ne marche que par hasard. Ton pointeur n'est pas initialisé, tu n'as pas le droit de faire ça. sprintf a besoin d'un endroit de mémoire où il enregistre son résultat, tu ne peux pas lui donner un pointeur qui ne pointe nulle part.
char chaine[]; sans précision d'une taille n'est pas valide non plus à l'endroit où tu l'as utilisé, d'ailleurs.
Et non, char * et char [], ce n'est pas toujours la même chose. Dans certains contextes oui, dans d'autres c'est très différent.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Une méthode valide:
class Bidule{
 private:
  char chaine[12];
 public:
  inline void intToChaine(int n){sprintf(chaine,"%i",n);}
};

Pourquoi 12? C'est la taille nécessaire pour stocker -2147483648 (l'entier de 32 bits le plus long) et le caractère '\0' final.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

règle fondamentale du C/C++ : ce n'est pas parce qu'un programme marche qu'il est correct !
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

6

(et on pourrait même étendre à l'ingénierie dans son ensemble, et appeler ça le théorème de Sally hehe)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

sprintf en C++ roll

8

Bah, c'est du C++ parfaitement valide (enfin, std::sprintf avec #include <cstdio> serait plus propre, mais bon).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

est-ce que j'ai dit que ct pas valide?
c juste que je trouve dommage de pas utiliser les flux qui prtt bcp plus simple/safe

10

s/les flux/QString::arg/ tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

On parles de C++ pas de Qt
avatar

12

Qt, c'est du C++. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Mais C++, c'est pas Qt smile