begin process at 2012 05 29 14:51:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

passage d'un char[] par reference


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

passage d'un char[] par reference

dimanche 4 mai 2008 à 22:11:23 | passage d'un char[] par reference

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
dimanche 4 mai 2008 à 22:37:25 | Re : passage d'un char[] par reference

Neo_Fr

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

Neo_Fr
dimanche 4 mai 2008 à 23:52:34 | Re : passage d'un char[] par reference

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++ (@++)

dimanche 4 mai 2008 à 23:55:50 | Re : passage d'un char[] par reference

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++ (@++)

lundi 5 mai 2008 à 01:21:21 | Re : passage d'un char[] par reference

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.
lundi 5 mai 2008 à 03:19:34 | Re : passage d'un char[] par reference

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++ (@++)

lundi 5 mai 2008 à 03:23:21 | Re : passage d'un char[] par reference

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++ (@++)

mardi 6 mai 2008 à 09:07:30 | Re : passage d'un char[] par reference

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!
mardi 6 mai 2008 à 14:30:50 | Re : passage d'un char[] par reference

Neo_Fr

Membre Club
Post le code de Recup_Donnees pour voir

Neo_Fr
mardi 6 mai 2008 à 15:43:23 | Re : passage d'un char[] par reference

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);

1 2

Cette discussion est classée dans : donnees, erreur, char, reference, dev


Répondre à ce message

Sujets en rapport avec ce message

HELP! DEV-C++ et Dll [ par couriousous ] HEllo!Comment on crée une Dll que l'on peut inclure dans Visual Basic avec dev-c++??? au départ j'ai une fonction char * mafonction(char *) et je veux Sous win32 & Dev-C++, Problème avec fputs() [ par FoLKeN91 ] BonjourComme dit dans le topic,je suis sous windows 2k, je compile avec Dev-C++ 4.9.8.0, et je souhaite copier certaines lignes d'un fichier .txt dans while (!kbhit()); [ par DJag ] >DJagSalut à tousJe voudrais savoir quel #include faut-il mettre pour que DEV C++ 4 reconnaisse ceci:while (!kbhit());à la compilation DEV C++ me mais Erreur DeviceIoControl ??? pk acces refusé ? [ par akk ] Bonjour,Voila lorsque j'execute ce code :(on passe le nom du lecteur en parametre exemple : main C)#include #include <iostre erreur compilation gtk dev-c++ [ par tombgalere ] Bonjour à tous.Après avoir soigneusement installer tous les packages nécéssaires pour développer en gtk via dev-c++ sous windows (DevEx/imagelib/GTK+ DEV-C++ 4.9.8.0 [ par norton ] Bonjour,j'ai installé DEV-C++ 4.9.8.0 et quand je compile mon programme j'obtien une erreur :dans l'onglet compiler l'erreur est :- C:\tunel\projet\M Erreur de compilation avec winbgim.h [ par ceeno ] J'ai un problème de compilation lorsque je fais un include de la librairie graphique winbgim.h avec DEVC++, voici mes 3 message d'erreur :1 d:\c\parti opengl dev-c++ (undefined reference) [ par prokev ] undefined reference to `auxDIBImageLoadA@4'c'est le message que mon compilateur me donne dans la section linker aussi tot que j'utilise la commande: a Pb avec l'assembleur dev-cpp [ par 6co ] Voici une source vue sur cppfrance et corrigée pour l'assembleur de Dev-Cpp#include #include #include #pragma inlineusing namespace std;int main(void) dev-cpp : erreur resources compilation [ par Helkanen ] Salut !J'ai un probleme de compilation avec Dev-Cpp (je sais, c pas un compilateur) qui m'énerve beaucoup : je peux pas compiler la moindre resource (


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales