2013-06-06 3 views
1

Je courais le programme suivant et obtenu des erreurs:Accédez à la violation de l'emplacement de lecture 0x00000000. avec argv []

First-chance exception at 0x0f32d440 (msvcr100d.dll) in c.exe: 0xC0000005: Access violation reading location 0x00000000. 
Unhandled exception at 0x772815de in c.exe: 0xC0000005: Access violation reading location 0x00000000. 
The program '[9048] c.exe: Native' has exited with code -1073741510 (0xc000013a). 

Voici le code

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char *argv[], char *env[]) //char *argv[] 
{ 
int i; 

printf("These are the %d command- line arguments passed to main:\n\n", argc); 
if(strcmp(argv[1],"123")==0)     
    { 
     printf("success\n"); 
    } 
else 
for(i=0; i<=argc; i++) 
    //if(strcmp(argv[1],"abc")==0) 

    printf("argv[%d]:%s\n", i, argv[i]); 
/*printf("\nThe environment string(s)on this system are:\n\n"); 
for(i=0; env[i]!=NULL; i++) 
printf(" env[%d]:%s\n", i, env[i]);*/ 
system("pause"); 
} 

Le problème doit être avec la fonction strcmp mais je ne sais pas comment le résoudre . Quelqu'un peut-il m'aider?

Répondre

2

Vous avez (au moins) deux problèmes.

Le premier fait ceci:

if(strcmp(argv[1],"123")==0) 

sans d'abord vérifier que argc >= 2.

Le second:

for(i=0; i<=argc; i++) 

en ce que vous devrait être traitement arguments 0-argc - 1 inclus. Ce que fait cette boucle est les arguments de processus 0 à argc et argv[argc] est toujours NULL.

Le programme suivant illustre une façon de résoudre ce problème:

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

int main (int argc, char *argv[]) { 
    int i; 

    printf ("These are the %d command-line argument(s) passed to main:\n", argc); 
    if ((argc >= 2) && (strcmp (argv[1], "123") == 0)) { 
     printf (" success\n"); 
    } else { 
     for (i = 0; i < argc; i++) { 
      printf (" argv[%d] = [%s]\n", i, argv[i]); 
     } 
    } 
    return 0; 
} 

Vous pouvez voir que la comparaison avec "123" ne se fait après avoir vérifié que argv[1] est peuplée correctement. En outre, la boucle a été modifiée pour exclure argv[argc] car ce n'est pas l'un des arguments. Une transcription suit:

pax> testprog 
These are the 1 command-line argument(s) passed to main: 
    argv[0] = [testprog] 

pax> testprog 123 
These are the 2 command-line argument(s) passed to main: 
    success 

pax> testprog a b c 
These are the 4 command-line argument(s) passed to main: 
    argv[0] = [testprog] 
    argv[1] = [a] 
    argv[2] = [b] 
    argv[3] = [c] 
+0

Merci. Cela a résolu le problème! – saul203

+0

Merci pour cela. Voté. – saul203

1

for(i=0; i<=argc; i++) doit être for(i=0; i<argc; i++).

Les matrices C/C++ sont de 0 à n-1. Vous exécutez 1 point à la fin du tableau.

+0

Assurez-vous également que votre deuxième tableau ARGV il est en fait plus de 1 article que vous référencez actuellement le deuxième élément du tableau à argv [1], devrait probablement être argv [0] – JanR

Questions connexes