Se connecter / S'enregistrer

Résolu [ C ] - System("dir %s:, disqueO); Impossible

Solutions (16)
Tags :
  • Programme
  • Programmation
|
Bonjour à tous !!

Je suis actuellement (enfin depuis hier) en train de "coder" un mini programme (en langage C) de synchronisation de deux disques (D: et E: par exemple) entre eux.

Vous vous doutez donc, au début du programme l'utilisateur doit saisir les lettres des 2 disques a synchroniser.

J'ai déclaré les variables des disques comme ceci:

char disqueO[2], disqueD[2]; // disqueO pour le disque d'Origine et disqueD pour le disque de destination.

Bref, pour que l'utilisateur puisse choisir un dossier spécifique a synchroniser, j'ai choisi de faire un DIR du disqueO avec la commande:

system(dir %s:", disqueO);

%s sert normalement a récupérer la lettre du disqueO que l'utilisateur a saisi auparavant, mais lorsque je compile mon programme l'erreur suivante apparait:

too many arguments to function 'system'

Voila, j'espere avoir été clair et je demande votre aide car je me suis récemment lancé dans le C et je ne maitrise pas tout. Toute proposition est la bienvenue.

Merci, bonne journée!
Contenus similaires
Meilleure solution
partage
, Programmation (collector) |
Il faut que tu passe par une fonction comme "scanf" pour récupérer la commande désirée.
Ensuite, tu concatènes avec dir pour effectuer la commande
Exemple:

  1. char command[100];
  2. char read[100];
  3.  
  4. strcat(command, "dir ");
  5. printf("Enter string: \n");
  6. scanf("%s", read);
  7. strcat(command, read);
  8. printf("Command read is: '%s' :)\n", command);
  9.  
  10. system(command);


N'oublie pas d'includre <string.h> pour utiliser la fonction "strcat"
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par tibo22.
  • Commenter cette réponse |
Score
0
òh
òi
|
Normal, chaque commande est exécutée de façon indépendante.

Je dis peut être une connerie, mais essaye de les concaténer dans la même commande, en utilisant le caractère "&" comme séparateur.

http://fr.wikibooks.org/wiki/DOS#Encha.C3.AEner_les_com...

EDIT: ah, bon bah très bien alors.
  • Commenter cette réponse |
Score
0
òh
òi
|
Problème résolu !!!

voici comment j'ai procédé (c'est très bourrin mais ca marche) pour le test du DIR

char CD[100]="cd /";
char dir[100]=dir c:";
char slash[11]="\\";

strcat(CD, "\n");
strcat(dir, slash);
strcat(dir, "\n");

system(CD);
system(dir);

system("pause");



Merci a vous 3 les gars ;) 

  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour, j'ai finalement réussi en utilisant la concaténation...

system(dir) fonctionne donc mais toujours le même probleme lorsqu'il s'agit de C:

J'ai donc entré en variable
char CD[100]="cd /"; (Pour se placer a la racine)
char dir[100]="dir c:\"; (pour lister la racine de C:\) ICI message d'erreur : missing terminating character

Lorsque le programme fait : (dans l'ordre)

system(CD);
puis
system(dir);

Il me liste toujours le bureau alors qu'on lui dit 2 fois d'aller a la racine....


Des propositions? Merci
  • Commenter cette réponse |
Score
0
òh
òi
|
Sinon en Win32 API, il y a les fonctions FindFirstFile, FindNextFile, FindFirstVolume, FindNextVolume, etc.
  • Commenter cette réponse |
Score
0
òh
òi
|
Compile ton code avant de le poster sur le forum, et essaye de corriger les erreurs (les messages ne sont pas toujours explicites, mais c'est comme ça qu'on progresse).


int strcmp(lettre, "c:" ) < Tu n'as pas mis de point virgule; "int" c'est juste le type de retour de ta fonction, ça t'indique qu'elle va renvoyer un entier que tu vas devoir récupérer; pour savoir si les deux chaines sont égales, c'est cet entier que tu vas mettre dans ton if() pour savoir si il est égal à 0, avec quelque chose du style:
Citation :

int ret;

ret = strcmp(lettre, "c:" );
if(ret==0)
{
//etc.
}




Citation :

int *pointeurSurLettre;
pointeurSurLettre = &lettre;

Cette partie c'est inutile, tu n'as pas besoin de l'adresse de "lettre" (la preuve, tu ne t'en sers pas par la suite).

Tu fais juste scanf("%s", lettre); sans le & vu que lettre pointe déjà à l'endroit où tu veux, et puis voila.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonsoir,

Bon j'ai du mal avec les pointeurs. J'ai beau chercher comment faire et retourner le problème dans tous les sens c'est assez difficile pour moi. Voici mon code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char dir[100] = "dir ";
char lettre[100];
int *pointeurSurLettre;
pointeurSurLettre = &lettre;

printf("saisir la lettre du disque. Exemple d: \n");
scanf("%s", &lettre);
int strcmp(lettre, "c:")
strcat(dir, lettre);
printf("%s \n", dir);
printf("\n");
system(dir);
system("pause>nul");

}

Je suis totalement paumé sur ce coup la, si quelqu'un pouvait m'éclairer un peu, je lui en serait reconnaissant...

Merci
  • Commenter cette réponse |
Score
0
òh
òi
|
Alors pour savoir ça, il y a la puissance des "pages manuel":
http://linux.die.net/man/3/strcmp
http://manpagesfr.free.fr/man/man3/strcmp.3.html

s1 et s2 sont les pointeurs vers les chaines de caractères que tu veux comparer. La fonction renvoie 0 si elles sont exactement les mêmes.

Exemple:
strcmp(lettre,"abcdefg"); (ici, mettre "abcdefg" va retourner un pointeur vers la chaine "abcdefg").

Autre chose:

scanf(%s", &lettre); < ça ne va pas marcher;
scanf attend un pointeur pour pouvoir écrire dans la bonne zone mémoire;
Ici, lettre est déjà un pointeur vers ta chaine, là tu passerais l'adresse du pointeur vers le pointeur, résultat il ne va pas écrire au bon endroit et ça va faire du caca.
Pour ce cas, il ne faut pas mettre le & (qui sert à récupérer l'adresse de quelque chose):
scanf("%s", lettre);
(et il te manque un guillemet).

Attention également, dans ce cas ce n'est pas forcément gênant mais %s s'arrête au premier "whitespace" (tabulation, espace, saut de ligne...) qu'il trouve.
  • Commenter cette réponse |
Score
0
òh
òi
|
Je viens de lire ça, que le if ne comparait que les nombres et non les strings....

dans ce cas que tu me donnes, a quoi correspondent *s1 et *s2??

Merci
  • Commenter cette réponse |
Score
0
òh
òi
|

if (lettre=="c:" )

Sans regarder le reste je peux te dire que ça, ça ne marche pas: ici, ce que tu vas faire, c'est simplement une comparaison d'adresse (lettre est un pointeur), alors que ce que tu veux vraiment faire c'est une comparaison du contenu des chaines de caractère:

Utilises plutôt
int strcmp(const char *s1, const char *s2);
Ou
int strncmp(const char *s1, const char *s2, size_t n);
  • Commenter cette réponse |
Score
0
òh
òi
|
Bon ça avance mais ce n'est toujours pas ça. Voici mon script:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char dir[100] = "dir ";
char lettre[100];

printf("Saisir la lettre du disque a lister sans oublier les : \n");
scanf(%s", &lettre);
strcat(dir, lettre);
printf("La commande effectuee est: %s \n", dir);
printf("\n");
system(dir);

system("pause");


Alors je vous explique. Les fichiers main.c et le main.exe sont sur le bureau (desktop).

Lorsque je rentre D: quand c'est demandé, il me liste parfaitement le disque D
Lorsque je rentre C: il me liste (parfaitement) le Bureau !!!

J'ai donc mis la condition suivante sous le scanf("%s", &lettre); pour me rendre a la racine de c: si la lettre saisie est c:

if (lettre=="c:")
{
system("cd /");
}

Mais toujours pareil :( 

Je sens que c'est proche, il doit manquer juste une commande...
  • Commenter cette réponse |
Score
0
òh
òi
|
OK, en effet c'est très malin ça (il faut être malin en prog toute facon, réussir a finter l'ordinateur est synonyme de fierté :)  )

Je teste
  • Commenter cette réponse |
Score
0
òh
òi
|
Euh...pas sur d'avoir tout capté en fait ^^

Il faut que je passe par une fonction pour faire le dir %s ??

  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour akred3, j'essaye ca de suite et je te dis, merci :) 
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
Bonjour,

Attention, voir man system :) 

  1. #include <stdlib.h>
  2.  
  3. int system (const char * string);

La fonction prend seulement une chaîne de caractères en paramètre.
Effectue un truc du genre scanf pour récupérer la variable tapée, ensuite place la dans la fonction system().

++
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS