Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 21/03/2013, à 12:53

Heisenor

[C]char **argv

Bonjour à vous tous,

Plus moyen de me rappeler comment passer un int à argv, pour clarifier ma situation quelques vbouts de code:

voilà le protoype de ma fonction:

int  client(pid_t pid, char *str)

et mon main:

int  main(pid_t pid, char *argv[])
{
             client(  ,argv[2]);
}
L'espace vide avant argv[2] est normal c'est parce que comme je l'ai dis avant je me rappele plus de ce qu'il faut mettre; Ma question est, bien evidemmment: que faut-il mettre ?

Merci

PS: pid_t est un int.

Hors ligne

#2 Le 21/03/2013, à 14:47

nicolas66

Re : [C]char **argv

client(atoi(argv[1]), argv[2]);

?


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#3 Le 21/03/2013, à 14:53

Heisenor

Re : [C]char **argv

ouep c'est bien ce que je me suis dis aussi, le problème c'est que c'est un travail scolaire ou il n'y a que quelques fonctions autorisées, travail que j'ai finis à pat ce détail qui est bien frustrant.

Hors ligne

#4 Le 21/03/2013, à 16:59

nicolas66

Re : [C]char **argv

Dans ce cas, c'est à toi de coder ta propre fonction de conversion. A toi de jouer wink


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#5 Le 21/03/2013, à 17:29

claudius01

Re : [C]char **argv

Bonjour,

Heisenor a écrit :

ouep c'est bien ce que je me suis dis aussi, le problème c'est que c'est un travail scolaire ou il n'y a que quelques fonctions autorisées, travail que j'ai finis à pat ce détail qui est bien frustrant.

Ne perd pas de temps à coder, toutes les fonctions et macro de la libc sont disponibles : atoi() ou mieux maintenant strtol() et à préférer.
De plus, elles font appel qu'à des fonctions qui elles mêmes sont disponibles en code source (cela apprendra au prof. à restreindre le champ d'utilisation des fonctions de la libc qui gagnent toutes à être connues et à être utilisées le plus tôt possible ;-)


Cordialement, A+
--
Claudius

Hors ligne

#6 Le 21/03/2013, à 17:29

pingouinux

Re : [C]char **argv

Bonjour,

Heisenor   #1 a écrit :

int  main(pid_t pid, char *argv[])

Attention, le premier argument de la fonction main est le nombre d'arguments passés lors de l'appel du programme (y compris le nom du programme)

$ cat t.c
#include <stdio.h>
main(int argc,char**argv) {
printf("argc=%d argv[0]=%s argv[1]=%s argv[2]=%s\n",argc,argv[0],argv[1],argv[2]);
}

$ make t
cc     t.c   -o t

$ ./t arg1 arg2
argc=3 argv[0]=./t argv[1]=arg1 argv[2]=arg2

Hors ligne

#7 Le 21/03/2013, à 17:51

Heisenor

Re : [C]char **argv

ah oui mince j'ai machinalement recopier "pid_t" dans le main....Quand à la restriction des fonctions je suis parfaitement d'accord, mais bon c'est comme ça....

Hors ligne

#8 Le 21/03/2013, à 19:55

Braun

Re : [C]char **argv

Bonjour,

Heisenor a écrit :

le problème c'est que c'est un travail scolaire ou il n'y a que quelques fonctions autorisées,

Vu les temps qui courent il vaut mieux ne pas évoquer la pédagogie, mais si tu as droit à la fonction  scanf() tu pourrais utiliser sscanf() pour effectuer la conversion.

Hors ligne

#9 Le 21/03/2013, à 22:51

claudius01

Re : [C]char **argv

Bonsoir,

Braun a écrit :

...mais si tu as droit à la fonction  scanf() tu pourrais utiliser sscanf() pour effectuer la conversion.

Argh, scanf() et sa clique ... une des plus dangereuses fonctions avec ses pièges de conversion non réalisée qui laisse des données dans le buffer à analyser et son passage d'arguments par adresse (cf. Contourner les pièges de scanf()). Là, par contre, si j'étais Prof., je limiterais son utilisation ipso facto...

NB: A l'occasion, je suis intéressé de savoir si scanf() est autorisée ?;-)
 

Cordialement, A+
--
Claudius

Dernière modification par claudius01 (Le 21/03/2013, à 22:52)

Hors ligne

#10 Le 22/03/2013, à 09:51

Heisenor

Re : [C]char **argv

Nope scanf est interdis, pour faire court seuls signal, kill (qui porte super mal son nom au passage ), getpid, malloc / free,  pause,  sleep, usleep, exit.

Voili Voilou, pour ceux qui se demanderaient ce que je fais avec ça je fais un système de communication client / serveur.

Sinon quelqu'un sait justement à quoi pourrait me servir le décalage de bits dans le cadre de l'envois d'un signal à un autre processus ? je vous en serais reconnaissant smile

Dernière modification par Heisenor (Le 22/03/2013, à 09:53)

Hors ligne

Haut de page ↑