Nous sommes le Ven 25/05/2012, 0:27




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
 [programmation]long en char 
Auteur Message
Lézard Bavard
Avatar de l’utilisateur

Inscription: Ven 24/08/2007, 16:00
Messages: 786
Localisation: Saint-Etienne > France
Message [programmation]long en char
J'ai encore un problème, basique cette fois ci ! :D
Je suis toujours en train de programmer (en C) .
Voila le principe de la partie du programme qui me pose probleme:
- Je fait un tableau de "long" avec:
Code:
long* tableau = NULL;
long nb_envoi = 10;
tableau = malloc(nb_envoi * sizeof(long)); // On alloue de la mémoire pour le tableau

- Je remplie le tableau avec des nombres paires:
Code:
for (i = 0 ; i < nb_envoi ; i++)
        {
            tableau[i] = envoi_client +2; //envoi_client étant un "long" initialisé à 0
            envoi_client = envoi_client +2;   
        }

- J'envoie chaque case du tableau l'une apres l'autre avec une socket:
Code:
for (compteur = 0; compteur < nb_envoi; compteur++)
{
                int lg;
                sprintf( buffer, "%ld", tableau[compteur] );  //mauvaise fonction ?
                lg = strlen(tableau[compteur]); //probleme ici
                sendto(sock,tableau[compteur],lg,0,(struct sockaddr *) &server,length); //et probleme ici
}


et gcc me met à la compilation:
attention : passing argument 1 of ‘strlen’ makes pointer from integer without a cast
attention : passing argument 2 of ‘sendto’ makes pointer from integer without a cast

Donc le type n'est pas le bon. D'apres les MAN des fonctions j'ai:
int sendto(int s, const void *chaine, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
et
strlen(const char* chaine);


Quelqu'un sait comment je peux passer mes valeurs du tableau de "long" à des "char" ? (le sprintf ne m'a pas aidé mais je l'ai peut être mal utilisé ... )


Jeu 27/12/2007, 14:56
Profil Site Internet
Lézardinomane
Avatar de l’utilisateur

Inscription: Dim 05/10/2003, 13:13
Messages: 5198
Localisation: Pau (fr)
Message 
Oui j'avoue, Montréal > Mexique c'est long en char.



-> []

_________________
Image

Image


Jeu 27/12/2007, 17:27
Profil
Lézardinomane
Avatar de l’utilisateur

Inscription: Mar 29/06/2004, 15:48
Messages: 5597
Localisation: Belgique
Message 
hum je comprends pas :?

prq tu as besoin de compter la valeur de ton tableau alors qu'il est rempli de nom ?
prq ne pas envoyer directement dans un socket à l'initialisation ?

dsl je dois revoir mes connaissances en C xD alors je cherche ... :|

_________________
Image


Jeu 27/12/2007, 17:50
Profil
Lézard Bavard
Avatar de l’utilisateur

Inscription: Ven 24/08/2007, 16:00
Messages: 786
Localisation: Saint-Etienne > France
Message 
oublie13 a écrit:
hum je comprends pas :?

prq tu as besoin de compter la valeur de ton tableau alors qu'il est rempli de nom ?
prq ne pas envoyer directement dans un socket à l'initialisation ?

dsl je dois revoir mes connaissances en C xD alors je cherche ... :|



euh ... :| J'ai peut être fait une boulette mais je vois pas à quel moment je compte les valeurs de mon tableau ... que j'ai remplie avec des long (donc des nombres).
:?:

Ensuite je n'envoies pas directement le tableau parce que au même moment il y aura un autre programme qui enverra le contenu d'un autre tableau qui contient des nombres impaires.
Le but étant de voir en réception quelles sont les valeurs reçues. ( parce que j'envoie en inhibant le CSMA/CA qui évite les collisions en Wifi ... donc il devrait y avoir des paquets perdus) :wink:

Dans tous les cas, merci pour ton coup de main, je retourne des tout de suite me remettre dans mes cours de C aussi :) :arrow:

cpt-pioupiou a écrit:
Oui j'avoue, Montréal > Mexique c'est long en char.
-> []
Merci pour l'avant gout du Quebec ... de bon matin j'ai mis du temps à comprendre :oops: :wink:

Edit: Bon en fait j'ai eu la réponse sur le forum de dévellopez.com ... c'est tout simplement "strlen(buffer) et sendto(buffer)"
Je me suis ennuyé à changer mon type et j'ai pas remplacé mes variables dans les fonctions à force de retourner le code dans tous les sens :-S


Ven 28/12/2007, 4:32
Profil Site Internet
Lézardinomane
Avatar de l’utilisateur

Inscription: Mar 29/06/2004, 15:48
Messages: 5597
Localisation: Belgique
Message 
NouNours a écrit:
euh ... :| J'ai peut être fait une boulette mais je vois pas à quel moment je compte les valeurs de mon tableau ... que j'ai remplie avec des long (donc des nombres).
:?:


strlen= fonction qui permet de compter le nombre de caractère se trouvant dans une "sting" (non pas un string .... - pour les esprits mal tournés-)

Citation:
lg = strlen(tableau[compteur])


d'après cette ligne, tu comptes le nombre de caractère se trouvant dans tableau[compteur] alors que c'est un nombre (d'où l'erreur lors de la compilation) tu ne devrais pas plutôt faire:
Citation:
lg = (tableau[compteur])


et humm pourquoi au lieu de déclarer en long tu le déclarerais pas en char directement ? pour la suite rien ne t'empêche de le remplir avec des nombres.

c'est de la communication inter-process que tu veux faire? :roll: si oui : jette un oeil là-dessus :D http://www.iprelax.fr/outils/c_prog5.php

_________________
Image


Ven 28/12/2007, 6:50
Profil
Lézard Bavard
Avatar de l’utilisateur

Inscription: Ven 24/08/2007, 16:00
Messages: 786
Localisation: Saint-Etienne > France
Message 
oublie13 a écrit:
strlen= fonction qui permet de compter le nombre de caractère se trouvant dans une "sting" (non pas un string .... - pour les esprits mal tournés-)

Citation:
lg = strlen(tableau[compteur])


d'après cette ligne, tu comptes le nombre de caractère se trouvant dans tableau[compteur] alors que c'est un nombre (d'où l'erreur lors de la compilation) tu ne devrais pas plutôt faire:
Citation:
lg = (tableau[compteur])
Non mais en fait parmi les arguments de la fonction "sendto" il faut que j'envoie la longueur de la chaine que j'envoie ... c'est pour ça que j'utilise strlen

et humm pourquoi au lieu de déclarer en long tu le déclarerais pas en char directement ? pour la suite rien ne t'empêche de le remplir avec des nombres.
c'est ce que j'avais fait au départ :wink: mais comme il y aura plus de 500 envoies il fallait que je puisse remplir le tabeau automatiquement et : "envoi_client = envoi_client +2" ne fonctionne pas si envoi_client est un char

c'est de la communication inter-process que tu veux faire? :roll: si oui : jette un oeil là-dessus :D http://www.iprelax.fr/outils/c_prog5.php c'est intéressant, je vais essayer de m'inspirer de leur rcvfrom parce que maintenant c'est ma partie réception qui fonctionne pas :deprime:


j'ai eu la réponse sur le forum de dévellopez.com ... c'est tout simplement "strlen(buffer) et sendto(buffer)"
Je me suis ennuyé à changer mon type et j'ai pas remplacé mes variables dans les fonctions à force de retourner le code dans tous les sens :-S


Ven 28/12/2007, 7:04
Profil Site Internet
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron