Recuperer des valeurs aprés un scanf

andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013 - 11 oct. 2011 à 09:36
pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 - 11 oct. 2011 à 18:39
Bonjour j'ai un probléme avec mon tableau de char:
je m'explique, j'ai

char chaine[];
scanf("%s"chaine);

si l'utilisateur met en ligne de commande
ls -l
je veux stocker dans:
chaine[0]=ls
chaine[1]=-l
ou cat fich.txt
chaine[0]=cat
chaine[1]=fich.txt

aprés ceci
mettre le contenu de chaine dans char* commande[] pour l'éxécuter.
merci!

5 réponses

StayCrunchy Messages postés 43 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 26 février 2014
11 oct. 2011 à 13:22
alors quand tu mets des caractères dans un tableau de char, pour "ls -l" ca donne :
chaine[0] contient "l"
chaine[1] contient "s"
chaine[2] contient " "
chaine[3] contient "-"
chaine[4] contient "l"
chaine[5] contient "\0"

un tableau de char est une chaîne de char, donc chaque case du tableau ne peut contenir qu'un seul char.

Après je te conseille de demander aux plus expérimentés si c'est bien judicieux d'utiliser scanf de cette manière.
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
11 oct. 2011 à 14:24
Pour éviter char[2]=" " j'ai utilisé strtok
0
StayCrunchy Messages postés 43 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 26 février 2014
11 oct. 2011 à 15:01
Je ne sais pas si j'ai bien compris...
Avec la chaîne "ls -l", tu veux faire deux chaines ? une avec juste "ls" et l'autre avec "-l" ?
Si oui, pourquoi ??
0
andoid Messages postés 108 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013
11 oct. 2011 à 15:47
pour pouvoir les executer avec exec
0

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

Posez votre question
pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
11 oct. 2011 à 18:39
Salut,
es-tu sûre d'avoir testé les codes que tu nous donnes ?

Dans:

char chaine[];
scanf("%s"chaine);


En plus du fait que ce soit "scanf ("%s",chaine); il y a 2 principaux problèmes:

- la taille de chaine n'est pas déclarée => impossible de faire un scanf.

- Comme l'a dit StayCrunchy, "chaine" est un tableau de caractères, on ne peut stocker qu'une chaine, et non plusieurs, à raison d'un
seul caractère par "case" du tableau.


Si tu souhaites stocker plusieurs chaines genre "ls" et "-l", dans un tableau, une solution est que celui-ci soit multi-dimmensionnel:
char chaines [indiceChaine][indiceCaractere];

Par exemple:


#include <stdio.h>


int main()
{
    // Tableau à deux dimmensions

    char chaines [2][3];

    // Remplissage caractère par caractère

    chaines[0][0] = 'l';
    chaines[0][1] = 's';
    chaines[0][2] = 0; // permet de terminer la chaine, sinon printf("%s", chaines[0]) renverrait "ls-l" au lieu de "ls".

    chaines[1][0] = '-';
    chaines[1][1] = 'l';
    chaines[1][2] = 0; // termine également la chaine.

    // Remplissage par strcpy (pour aller plus vite)

    strcpy(chaines[0], "ls");
    strcpy(chaines[1], "-s");


    // Remplissage par scanf

    scanf ("%s", chaines[0]);
    scanf("%s", chaines[1]);

    // Affichage

    printf("Chaine 1 : %s\nChaine 2: %s\n", chaines[0], chaines[1]);

    return 0;
}


La différence c'est que qu'apparamment ce que tu souhaites faire c'est de ne faire qu'un seul scanf, de séparer la commande et les
options puis les répartir vers des chaines différentes.
Mais tu dis que le but est de pouvoir les éxecuter avec exec, alors pourquoi ne pas faire directement un appel systeme exec qui prend
une seule et unique chaine en argument, celle que l'utilisateur rentre ? Pourquoi faut-il les séparer ?

Et aussi:

Pour éviter char[2]=" "


un char se remplit avec des '', genre char lettre 'x' et non char lettre "x", car celle-ci indique une chaine, et si on les places
pour un caractère et non une chaine, cela renvoit un warning de conversion.

C++dialement,


Pop70
0