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