[debutant] Que doit-on attendre de ce code ?

Le
bpascal123
Bonjour,
En apparence, ce code ne produit pas de résultat ni de message
d'erreur :

#include <stdio.h>

void print_vertical(char *str) ;

int main(int argc, char *argv[])
{
if (argc > 1)
print_vertical(argv[1]) ;

return 0 ;
}

void print_vertical(char *str)
{
while (*str)
printf("%c", *str++) ;
}

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hamiral
Le #20641291
wrote:
Bonjour,
En apparence, ce code ne produit pas de résultat ni de message
d'erreur :

#include
void print_vertical(char *str) ;

int main(int argc, char *argv[])
{
if (argc > 1)
print_vertical(argv[1]) ;

return 0 ;
}

void print_vertical(char *str)
{
while (*str)
printf("%cn", *str++) ;
}

Merci



Ça ressemble à un exercice...
Que se passe-t-il lorsque tu passes un paramètre (en ligne de commande)
à ton programme ?...

Ham
bpascal123
Le #20641331
On Nov 27, 2:00 am, Hamiral
wrote:
> Bonjour,
> En apparence, ce code ne produit pas de résultat ni de message
> d'erreur :

> #include
> void print_vertical(char *str) ;

> int main(int argc, char *argv[])
> {
>    if (argc > 1)
>            print_vertical(argv[1]) ;

>    return 0 ;
> }

> void print_vertical(char *str)
> {
>    while (*str)
>            printf("%cn", *str++) ;
> }

> Merci

Ça ressemble à un exercice...
Que se passe-t-il lorsque tu passes un paramètre (en ligne de commande)
à ton programme ?...

Ham



Oops, j'ai oublié de mettre le lien du code que j'ai copié-collé (il
n'y a aucun commentaire qui va avec le code et je suis autodidacte,
c'est pourquoi je cherche à comprendre :
http://www.java2s.com/Code/C/Function/Passcharpointerintofunction.htm

...
Quand je passe un paramètre, je modifie la valeur retournée par une
fonction. Maintenant, je ne sais pas ce que c'est que passer un
paramètre en ligne de commande. Je devrais avoir 10/20 si c'était un
exercice?
zwim
Le #20641381
Le Thu, 26 Nov 2009 17:55:34 -0800 (PST)
a écrit
On Nov 27, 2:00 am, Hamiral
wrote:
> Bonjour,
> En apparence, ce code ne produit pas de résultat ni de message
> d'erreur :

> #include
> void print_vertical(char *str) ;

> int main(int argc, char *argv[])
> {
>    if (argc > 1)
>            print_vertical(argv[1]) ;

>    return 0 ;
> }

> void print_vertical(char *str)
> {
>    while (*str)
>            printf("%cn", *str++) ;
> }

> Merci

Ça ressemble à un exercice...
Que se passe-t-il lorsque tu passes un paramètre (en ligne de commande)
à ton programme ?...

Ham



Oops, j'ai oublié de mettre le lien du code que j'ai copié-collé (il
n'y a aucun commentaire qui va avec le code et je suis autodidacte,
c'est pourquoi je cherche à comprendre :
http://www.java2s.com/Code/C/Function/Passcharpointerintofunction.htm

...
Quand je passe un paramètre, je modifie la valeur retournée par une
fonction. Maintenant, je ne sais pas ce que c'est que passer un
paramètre en ligne de commande. Je devrais avoir 10/20 si c'était un
exercice?



La ligne de commande c'est ce qu'on écrit sur le prompt d'un shell
quelconque (je te vois venir, c'est quoi un shell ? c'est quoi un
prompt ?), en général batch (fenêtre DOS), ou bash (fenêtre Cygwin ou
Xterm linux).

http://maraudeur.virtuaboard.com/tutoriels-f18/linux-qu-est-ce-qu-une-ligne-de-commande-t250.htm

Donc si tu compiles un programme qui te donne un exécutable toto, la
ligne de commande c'est

./toto param1 param2 param3 ...

Et les paramêtres sont récupérés dans le tableau argv[ ] sous forme de
string, et argc en donne le nombre + 1 (argv[0] étant en général le
nom du programme appelé).

http://www.cmi.univ-mrs.fr/~contensi/coursC/index.php?section=env&page=comm


--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
bpascal123
Le #20642271
On 27 nov, 03:15, zwim
Le Thu, 26 Nov 2009 17:55:34 -0800 (PST)
a écrit



>On Nov 27, 2:00 am, Hamiral >> wrote:
>> > Bonjour,
>> > En apparence, ce code ne produit pas de résultat ni de message
>> > d'erreur :

>> > #include
>> > void print_vertical(char *str) ;

>> > int main(int argc, char *argv[])
>> > {
>> >    if (argc > 1)
>> >            print_vertical(argv[1]) ;

>> >    return 0 ;
>> > }

>> > void print_vertical(char *str)
>> > {
>> >    while (*str)
>> >            printf("%cn", *str++) ;
>> > }

>> > Merci

>> Ça ressemble à un exercice...
>> Que se passe-t-il lorsque tu passes un paramètre (en ligne de comman de)
>> à ton programme ?...

>> Ham

>Oops, j'ai oublié de mettre le lien du code que j'ai copié-collé ( il
>n'y a aucun commentaire qui va avec  le code et je suis autodidacte,
>c'est pourquoi je cherche à comprendre :
>http://www.java2s.com/Code/C/Function/Passcharpointerintofunction.htm

>...
>Quand je passe un paramètre, je modifie la valeur retournée par une
>fonction. Maintenant, je ne sais pas ce que c'est que passer un
>paramètre en ligne de commande. Je devrais avoir 10/20 si c'était un
>exercice?

La ligne de commande c'est ce qu'on écrit sur le prompt d'un shell
quelconque (je te vois venir, c'est quoi un shell ? c'est quoi un
prompt ?), en général batch (fenêtre DOS), ou bash (fenêtre Cygwi n ou
Xterm linux).

http://maraudeur.virtuaboard.com/tutoriels-f18/linux-qu-est-ce-qu-une...

Donc si tu compiles un programme qui te donne un exécutable toto, la
ligne de commande c'est

./toto param1 param2 param3 ...

Et les paramêtres sont récupérés dans le tableau argv[ ] sous for me de
string, et argc en donne le nombre + 1 (argv[0] étant en général le
nom du programme appelé).

http://www.cmi.univ-mrs.fr/~contensi/coursC/index.php?section=env&pag.. .

--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...



Je n'avais pas encore vu cette partie du langage c. Par curiosité, les
variables de la ligne de commande sont stockées en mémoire?
Directement dans un ou des registres?
Merci
-ed-
Le #20642721
On 27 nov, 10:06, ""
Je n'avais pas encore vu cette partie du langage c. Par curiosité, les



La ligne de commande et le passage de paramètres n'est pas une
particularité du langage C mais de de ton système (en fait de la
partie qui appelle les application, souvent un 'shell').

Ce qui est propre au langage C, c'est la manière (décrite ci-dessus)
pour récupérer les données de la ligne de commande.

variables de la ligne de commande sont stockées en mémoire?



Si tu parles des données, oui, elle sont stockée en mémoire, mais
qu'importe. Ce qui compte c'est de savoir qu'elle sont de classe
'static', c'est à dire permanente pendant la durée d'exécution du
programme. Elles appartiennent au processus courant.
candide
Le #20643741
-ed- a écrit :
On 27 nov, 10:06, ""
Je n'avais pas encore vu cette partie du langage c. Par curiosité, les



La ligne de commande et le passage de paramètres n'est pas une
particularité du langage C mais de de ton système (en fait de la
partie qui appelle les application, souvent un 'shell').




Embrouillons, embrouillons ...



variables de la ligne de commande sont stockées en mémoire?



Si tu parles des données, oui, elle sont stockée en mémoire, mais
qu'importe.



Bonne réponse.


Ce qui compte c'est de savoir qu'elle sont de classe
'static',



Les paramètres de la ligne de commande sont de classe static ?????

Et t'as vu ça au cinéma ?



Elles appartiennent au processus courant.



Embrouillons, embrouillons toujours, chargeons encore un peu la barque
avant qu'elle ne coule ...

Le bon code : sandbox.
Antoine Leca
Le #20644131
candide a écrit :
-ed- a écrit :
On 27 nov, 10:06, ""
Je n'avais pas encore vu cette partie du langage c. Par curiosité, les


La ligne de commande et le passage de paramètres n'est pas une
particularité du langage C mais de de ton système (en fait de la
partie qui appelle les application, souvent un 'shell').



Embrouillons, embrouillons ...



Pourquoi « embrouillons » ? Surtout que tu as coupé l'autre phrase
d'Emmanuel, qui expliquait ce qui est propre au langage C, c'est-à-dire
le concept de tableau argv[*] prédécoupé.

Qui plus est, Emmanuel n'est pas rentré dans les détails des différents
systèmes de passage de paramètres ; car la ligne de commande n'est qu'un
système comme un autre, avec Unix tu peux utiliser execxx() à la place,
avec les environnements graphiques ce sera une icone etc.; on s'en
moque, c'est le boulot du compilateur de faire la transition pour
présenter des arguments découpés.



Ce qui compte c'est de savoir qu'elle sont de classe
'static',



Les paramètres de la ligne de commande sont de classe static ?????



Tu n'as pas lu le texte que tu as coupé ?
Les paramètres de la ligne de commande sont un concept extérieur.
On parle donc uniquement des arguments passés par l'environnement
d'exécution C à la fonction main()).

Les arguments (les valeurs) passés au programme dans le tableau argv,
ainsi que leur nombre argc (les noms des paramètres sont des
conventions), sont effectivement des variables de durée de stockage
statique, c'est-à-dire ni automatique ni dynamique. Il est facile de
comprendre que ce ne peut être dynamique (tu ne peux pas écrire
free(argv[0]) ou utiliser realloc). Et la dernière contrainte de
5.1.2.2.2a2 (« ... gardent leurs valeurs [...] pendant la terminaison du
programme. ») les exempt de pouvoir avoir la durée automatique de main.


Antoine
Hamiral
Le #20645721
wrote:
Bonjour,
En apparence, ce code ne produit pas de résultat ni de message
d'erreur :

#include
void print_vertical(char *str) ;

int main(int argc, char *argv[])
{
if (argc > 1)
print_vertical(argv[1]) ;

return 0 ;
}

void print_vertical(char *str)
{
while (*str)
printf("%cn", *str++) ;
}

Merci



Pour faire simple :
argc contient le nombre de paramètres passés à ton programme (ligne de
commande ou autre) + 1.
argv est un tableau de argc chaînes de caractères représentant les
paramètres passés à ton programme, plus le nom du fichier exécuta ble qui
contient ton programme (dans argv[0]).
Donc les paramètres passés à ton programme sont stockés dans argv [1],
argv[2]...argv[argc]
Maintenant, si tu exécutes ton programme avec un paramètre, tu pourra s
déduire facilement le fonctionnement de la fonction print_vertical (en
fait tu pouvais déjà le déduire au nom de cette foncton).

Ham
Hamiral
Le #20644171
Antoine Leca wrote:
candide a écrit :
-ed- a écrit :
On 27 nov, 10:06, ""
Je n'avais pas encore vu cette partie du langage c. Par curiosité, les


La ligne de commande et le passage de paramètres n'est pas une
particularité du langage C mais de de ton système (en fait de la
partie qui appelle les application, souvent un 'shell').


Embrouillons, embrouillons ...



Pourquoi « embrouillons » ? Surtout que tu as coupé l'autre phras e
d'Emmanuel, qui expliquait ce qui est propre au langage C, c'est-à-di re
le concept de tableau argv[*] prédécoupé.



C'est vrai que pour commencer, autant faire simple sans trop rentrer
dans les détails techniques. Les questions plus pointues lui viendront
après ça et de nombreuses erreurs de sa part ;)

Ham
Lucas Levrel
Le #20645041
Le 27 novembre 2009, Hamiral a écrit :

Donc les paramètres passés à ton programme sont stockés dans argv[1],
argv[2]...argv[argc]



... argv[argc-1], non ?

--
LL
Publicité
Poster une réponse
Anonyme