2014-06-10 2 views
-3

Quand j'examine argv[1] et argv[2], je ne peux pas ouvrir et écrire à eux! Si je n'écris pas l'examen, toutes les choses fonctionnent. Je dois également utiliser les paramètres de la ligne de commande.Quand j'examine argv [1] et argv [2] je ne peux pas ouvrir et écrire à eux

La principale

int main(int argc, char **argv[]) 

une partie de

while (i < MAXADAT && kilep) 
    { 
     hianyzofajleredmeny = 1; 
     if ((argv[2][i] == '.' && argv[2][i + 1] == 'c' && argv[2][i + 2] == 's' && argv[2][i + 3] == 'v' && argv[2][i + 4] == '\0')) 
     { 
      hianyzofajleredmeny = 0; 
      kilep = 0; 
     } 
     i++; 

Qu'est-ce que je fais mal?

+2

Veuillez poster le code qui ne fonctionne pas. BTW votre longue ligne ici peut être remplacé par '! Strcmp (argv [2] + i," .csv ")' –

+0

Voici un lien! L'ensemble du programme! Fondamentalement, j'ouvre une annonce de fichier CVS avec leur tâche que je l'écris un nouveau fichier CSV! http://www.speedyshare.com/JaA7S/VEGLEGES-vegleg.txt – user3724530

+3

Apparemment, je dois télécharger un fichier .exe pour obtenir le contenu de ce site. Mis à part le fait qu'un '.exe 'ne fonctionnera pas sur un Mac, je n'utiliserais pas un site qui nécessite son téléchargeur pour quelque chose d'aussi trivial que celui-ci. –

Répondre

0

Il n'y a pas beaucoup de magie impliqué. Vous ne montrez pas assez de code pour que nous sachions ce que vous faites vraiment, mais ce code ouvre les fichiers spécifiés dans argv[1] et argv[2].

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

int main(int argc, char **argv) 
{ 
    if (argc != 3) 
    { 
     fprintf(stderr, "Usage: %s file1 file2\n", argv[0]); 
     return 1; 
    } 
    char *dot1 = strrchr(argv[1], '.'); 
    if (dot1 == 0 || strcmp(dot1, ".csv") != 0) 
    { 
     fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[1]); 
     return 1; 
    } 
    FILE *fp1 = fopen(argv[1], "r"); 
    if (fp1 == 0) 
    { 
     fprintf(stderr, "%s: failed to open %s for reading\n", argv[0], argv[1]); 
     return 1; 
    } 
    char *dot2 = strrchr(argv[2], '.'); 
    if (dot2 == 0 || strcmp(dot2, ".csv") != 0) 
    { 
     fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[2]); 
     return 1; 
    } 
    FILE *fp2 = fopen(argv[2], "w"); 
    if (fp2 == 0) 
    { 
     fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], argv[2]); 
     return 1; 
    } 

    char buffer[1024]; 
    size_t nbytes; 

    while ((nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp)) != 0) 
     fwrite(buffer, sizeof(char), nbytes, fp2); 

    fclose(fp1); 
    fclose(fp2); 
    return 0; 
} 

Il serait judicieux d'erreur vérifier fclose(fp2); En cas d'échec, le fichier de sortie n'a pas été créé avec succès. Il est moins crucial de vérifier l'erreur fclose(fp1) en général. Le code bénéficierait de fonctions de rapport d'erreurs, de sorte que les blocs de signalisation d'erreur occupent une ligne chacun au lieu de quatre, mais écrire une fonction pour faire ce travail est juste un peu plus complexe que ce que vous êtes prêt à faire. . Pas radicalement plus complexe, mais assez que je ne vais pas vous surcharger avec ça. Le code est très verbeux en conséquence, cependant. Le code suppose également que vous avez C99 ou C11 de sorte que vous pouvez déclarer des variables à des points arbitraires dans une fonction. Si vous êtes coincé avec C89, alors (a) il est temps de passer à un niveau où vous pouvez utiliser une norme qui a seulement 15 ans au lieu de 25 ans, et (b) vous devrez déplacer toutes les déclarations de variables vers le haut de la fonction et changer les initialisations en affectations.