begin process at 2008 07 04 12:14:23
1 204 587 membres
128 nouveaux aujourd'hui
14 116 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : passage d'un char[] par reference [ Divers / Débutant(e) ] (tibob51)

passage d'un char[] par reference le 04/05/2008 22:11:23

tibob51
Membre Club
Bonsoir a tous, j'ai un problème que je n'arrive pas à comprendre.
Je programme depuis peu sous dev c++, et j'ai une syntaxe que j'utilisai sous borland qui n'est pas acceptée par dev:
voici l'erreur que me renvoi dev:
152 L:\Programation\Mes Programme c++\AlertoRage\main.cpp invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char*' .

voici mon code:

{
char Donnees[2048];
 Recup_Donnees(Donnees);// Ligne 152,apparement l'erreur vien d'ici
//reste du code
}

et la déclaration de Recup_Donnees:
void Recup_Donnees(char* &reponse);

Cette syntaxe marchait parfaitement sous borland je l'ai utilisée plusieur fois.
Je ne comprends pas ce qu'est cette erreur.
Quelqu'un pourrait m'aider?
merci

Re : passage d'un char[] par reference le 04/05/2008 22:37:25

Neo_Fr
Membre Club
Réponse acceptée !
Remplace tt simplement
void Recup_Donnees(char* &reponse);
par void Recup_Donnees(char* reponse);

Neo_Fr

Re : passage d'un char[] par reference le 04/05/2008 23:52:34

SAKingdom
Membre Club
Non. Il ne s'agit pas du tout de la même chose.
L'équivalent de char *& est char **.

Ceci dit, on ne peut pas faire passer un tableau pour l'adresse d'un pointeur pour la raison qu'un tableau est qu'une zone mémoire accessibles via un index.

tab == &tab[0];
Ce n'est pas un pointeur en tant que tel.

Je ne vois pas trop comment expliquer alors pour faire simple, je vais essayer de vulgariser un peu:
Un pointeur est une variable stockant l'adresse d'une zone mémoire.
Un tableau est une zone mémoire.

Quand une fonction demande un char ** par exemple, c'est pour, généralement, modifier l'adresse où pointe un pointeur.
Mais un tableau est déjà une zone mémoire. Impossible de modifier son emplacement.

Je ne sais pas si c'était clair. Comme je l'avais déjà dis, je suis assez nul pour expliquer ce genre de chose.

C++ (@++)


Re : passage d'un char[] par reference le 04/05/2008 23:55:50

SAKingdom
Membre Club
"tab == &tab[0];"
&tab == &tab[0]
Le résultat est le même mais bon, pour être plus clair...

oublie le ;
Ce n'était qu'un réflexe.

C++ (@++)


Re : passage d'un char[] par reference le 05/05/2008 01:21:21

tibob51
Membre Club
Heu je patoge un peu dans ton explication (faut le temps que ça monte au cerveau surtout a cette heure-ci ), donc en faite si j'ai bien compris c'etais l'adresse de mon pointeur que ma fonction récuperrai et non pas la valeur de Données?!

j'expose juste mon résonement merci de me reprendre là ou je me plante:
reponse pointe sur Donnees qui est un tableau de caractères dans lequel je vais écrire.

je pense que je dit une connerie là!!!

PS: par contre ce que je n'arrive pas du tout a comprendre c'est pourquoi quand je faisait ça avec borland il n'y avait aucun problème?

Merci pour votre aide a tous les deux.

Re : passage d'un char[] par reference le 05/05/2008 03:19:34

SAKingdom
Membre Club
Aucune idée pourquoi ça fonctionnait avec Borland. Peut-être en faisait-il un pointeur je sais pas.

Ce que je dis c'est qu'un pointeur, on peut extraire son adresse, car c'est une variable. Pas un tableau, car c'est une zone mémoire. L'adresse que l'on obtient quand on fait &tab correspond à l'adresse de sa première case (&tab[0]). Ce n'est pas un pointeur, c'est un emplacement mémoire.

En ultra simple et résumé : on peut modifier où pointe un pointeur mais pas un tableau. Voilà.



C++ (@++)


Re : passage d'un char[] par reference le 05/05/2008 03:23:21

SAKingdom
Membre Club
Je peux déduire que si tu as accepté la réponse de neo_fr, c'est que ta fonction Recup_Donnees ne fait qu'une copie dans un buffer.
Si c'est le cas, tu n'avais pas du tout besoin de référence.


C++ (@++)


Re : passage d'un char[] par reference le 06/05/2008 09:07:30

tibob51
Membre Club
Ben non et c'est bien ça que je ne comprend pas j'avais bel et bien besoin d'un reference, ce n'est pas une copie dont j'ai besoin, mais Recup_Donnees doit me charger la variable que je lui passe par référence,là j'avoue ne plus trop comprendre!

Re : passage d'un char[] par reference le 06/05/2008 14:30:50

Neo_Fr
Membre Club
Post le code de Recup_Donnees pour voir

Neo_Fr

Re : passage d'un char[] par reference le 06/05/2008 15:43:23

tibob51
Membre Club
WSAStartup(0x0202, &WSAData);
 W_IP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 Hote = gethostbyname(Nom_hote);
 memcpy(&In_Adresse, Hote -> h_addr, Hote -> h_length);
 SockAddrIn.sin_family = AF_INET;
 SockAddrIn.sin_port = htons(80);
 SockAddrIn.sin_addr = In_Adresse;
 connect(W_IP, (SOCKADDR *)&SockAddrIn, sizeof(SockAddrIn));     
 send(W_IP, Adresse, strlen(Adresse), 0);
 Sleep(450);
 recv(W_IP, reponse, 4096, 0);


[Page 1 Page 2]
Classé sous : donnees, erreur, char, reference, dev

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS