2012-10-29 2 views
0

Je travaille sur un programme C qui obtient les arguments de la ligne de commande et leur ajoute une extension de fichier.concaténer chaque valeur de argv avec une chaîne

L'exécution sera quelque chose comme ceci: >myprogram file1 file2 et exécutera un autre programme qui utilisera comme argument file1.txt et file2.txt. J'ai essayé de faire qui ajouterait l'extension et exécuter une commande (s1 est le chemin et s2 est argv[i] sur une boucle:

int getfile(char *s1, char *s2){ 
char *str2 = malloc(sizeof(s2)+3); 
strcpy(str2,s2); 
strcat(str2,".txt"); 
execl(s1,"program",str2,NULL); 
exit(0); 
} 

La fonction exécute le programme pour un fichier (>program file1.txt et >program file2.txt), mais je devra trouver un moyen de l'exécuter de cette façon (>program file1.txt file2.txt).

J'ai essayé de modifier directement argv, mais je n'a pas abouti.

Tout conseil?

+1

Utilisez 'strlen' pour la longueur, pas' sizeof'. Vous avez également besoin de quatre caractères supplémentaires, pas trois. – chris

+0

En outre, pour l'ajout de '.txt', vous avez besoin de 5 caractères supplémentaires, et non de 3. –

+0

@ H2CO3, Oui, je suppose que je comptais déjà la valeur null dans' s2', mais l'utilisation de 'strlen' ne l'est pas. – chris

Répondre

0

Essayez ce code:

int main(int argc, char *argv[]) 
{ 
    char *buffer; 
    char command[512]; 
    int i = 1; 
    for(i = 1; i < argc; i++){ 
    buffer = malloc(strlen(argv[i]) + 5); 
    strcpy(buffer,argv[i]); 
    strcat(buffer,".txt"); 
    sprintf(command,"touch %s\0",buffer); 
    system(command); 
    free(buffer); 
    } 
    return 0; 
} 

Un programme simple qui n'a pas de vérification d'erreur, et je voudrais ajouter explicitement la fin de chaîne.

+0

Vous n'avez pas besoin de '' \ 0 ''. Vraiment. –

+0

Ce code fait la même chose que le code que j'ai écrit sur le post initial, il exécute le programme avec l'argument individuel ('> programme fichier1.txt' programme fichier2.txt'), mais ce que je cherche est de courir de cette façon '> program file1.txt file2.txt' – Mehdi

+0

Fait quelques modifications mineures au code, donc il peut exécuter tous les arguments dans une seule ligne de commande. – Mehdi

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

int main(int argc, int *argv[]){ 
    if(argc==1){ 
     printf("You have not entered anything!\n"); 
     return 0; 
    } 
    char *arr=malloc(1000*sizeof(char)); 
    int i; 
    strcat(arr, argv[0]); 
    strcat(arr, " "); 
    for(i=0;i<argc-1;i++){ 
     strcat(arr,argv[i+1]); 
     strcat(arr,".txt"); 
     strcat(arr," "); 

     strcat(arr,"\0"); 
    } 

    printf("%s\n",arr); 
    free(arr); 
    return 0; 

} 
Questions connexes