Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

30 réponses
Avatar
bpascal123
Bonjour,
En apparence, ce code ne produit pas de r=E9sultat 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\n", *str++) ;
}

Merci

10 réponses

1 2 3
Avatar
Hamiral
wrote:
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("%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
Avatar
bpascal123
On Nov 27, 2:00 am, Hamiral wrote:
wrote:
> 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("%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?
Avatar
zwim
Le Thu, 26 Nov 2009 17:55:34 -0800 (PST)
a écrit
On Nov 27, 2:00 am, Hamiral wrote:
wrote:
> 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("%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...
Avatar
bpascal123
On 27 nov, 03:15, zwim wrote:
Le Thu, 26 Nov 2009 17:55:34 -0800 (PST)
a écrit



>On Nov 27, 2:00 am, Hamiral wrote:
>> wrote:
>> > 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("%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
Avatar
-ed-
On 27 nov, 10:06, ""
wrote:
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.
Avatar
candide
-ed- a écrit :
On 27 nov, 10:06, ""
wrote:
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.
Avatar
Antoine Leca
candide a écrit :
-ed- a écrit :
On 27 nov, 10:06, ""
wrote:
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
Avatar
Hamiral
wrote:
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("%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
Avatar
Hamiral
Antoine Leca wrote:
candide a écrit :
-ed- a écrit :
On 27 nov, 10:06, ""
wrote:
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
Avatar
Lucas Levrel
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
1 2 3