[C] Passage de paramètres

bonobo78 Messages postés 9 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 29 octobre 2003 - 28 oct. 2003 à 19:54
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 28 oct. 2003 à 23:53
j'ai un autre petit pb, je m'explique :

j'ai le main qui appele une fonction (access) en passant un entier en parametre. Cette fonction access appele une autre fonction (lecture_fichier) en passant comme parametre le meme entier. mais il n'a plus la bonne valeur dans la fonction lecture_fichier... :(

----------------------------
void lecture_fichier( char *path, int sock) {
...
printf("sock2 = %d\n",sock);

}

void access ( int sock ) {
...
printf("sock1 = %d\n",sock);
lecture_fichier(path,sock);
}

------------------------------------------

lorsque je lance le prog ca affiche ca :

sock1 = 4
sock2 = 1937007724

why ?

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 oct. 2003 à 20:23
Si tu ne touches pas a la valeur de sock dans lecture_fichier() avant de l'afficher alors nous sommes devant un miracle.
BruNews, ciao...
0
bonobo78 Messages postés 9 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 29 octobre 2003
28 oct. 2003 à 20:38
bah non j'y touche pas !! :)
0
bonobo78 Messages postés 9 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 29 octobre 2003
28 oct. 2003 à 20:41
void lecture_fichier( char *path, int sock) {

FILE * File;
char *message;
int msg = ACK;
int taille = 1024;

File = fopen(path,"r");
message = (char*)malloc(1024);

while(taille = fread(&message,1024,1,File)){

printf("sock = %d\n",sock); // 2eme printf

if(write(sock,&msg, sizeof(msg)) == -1){
perror("EnvoieFichier");
exit(2);
}
printf("1er send ok\n");
if(send(sock,message, 1024,0) == -1){
perror("EnvoieFichier2");
exit(2);
}
}
free(message);
fclose(File);
msg = FINFICHIER;
if(write(sock, &msg, sizeof(int)) == -1){
perror("FinEnvoi");
exit(2);
}

}

void access ( int sock ) {

char path[200];
int desc;
int notfound = NONTROUVE;
int msg = ACK;

printf("Fonction ACCESS.......................\n");

if ( read(sock,path,200) < 0) {
perror("read2");
exit(4);
}
printf("path = %s\n",path);

if ( (desc = open(path,O_RDONLY)) < 0 ) {
perror("Open");
if ( write (sock,¬found, sizeof(notfound)) == -1) {
perror("write");
exit(2);
}
exit(1);
} else {
printf("sock = %d\n",sock); // 1er printf
lecture_fichier(path,sock); // appel de la fonction
}
}
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 oct. 2003 à 21:26
Salut,
Déja une erreur:
fread(&message,1024,1,File); //le '&' est en trop, car message est un char *

Ensuite je comprend pas trop ce que c'est "sock". Tu le déclares en int, tu l'utilise avec send(), write(), read()... ?

Si c'est un socket handle, retourné par la fonction socket(...), le mieux est que tu le mette dans une variable globale (déclarée en dehors de toute fonction, y compris main) et comme ca tu pourra l'utiliser partout dans ton programe sans avoir besoin de le passer en parametre a toutes tes fonctions.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonobo78 Messages postés 9 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 29 octobre 2003
28 oct. 2003 à 21:41
ok je vais le mettre en variable globale parce que la je suis vraiment désespéré :)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
28 oct. 2003 à 23:53
Je pense que l'erreur vient tout simplement de là

fread(&message,1024,1,File)

au lieu d'écrire dans le buffer alloué, la fonction écrit la où est stocké l'adresse du buffer c'est à dire dans la pile. fread ecrit donc à l'emplacement de message et continu en écrasant le contenu de la pile à savoir les variables locales et les paramètres passés à la fonction.
0
Rejoignez-nous