2010-10-12 4 views
0
#include <stdio.h> 
#include <stdlib.h> 
char *color[] = 
{ 
    /*0*/"red||bluegreen", 
    /*1*/"blue", 
    /*2*/"green", 
     "\0" 
}; 

int fun1(char * str1) 
{ 
    int c = 0; 
    while(1) 
    { 
     if(str1[c] == '|' && str1[c+1] == '|') 
      return c; 
     c++;  
    } 
    return 0;  
} 


1. int main() 
2. { 
3. int ret=0, offset=0; 
4. ret = fun1(color[offset]); 
5 offset += ret; 
6 ret = fun1(color[offset]); 

7 return 0; 
    } 

Dans l'extrait de code ci-dessus dans main() à la ligne 6 de l'argument fun1() est color[offset] = NULL Pourquoi color[offset] = NULL après l'opération offset += ret. S'il vous plaît précisertampon devient nulle après réindexation

Merci

Répondre

3

Le premier appel à fun1 ici ret = fun1(color[offset]); retours 3 comme color[0][3] et color[0][4] sont à la fois |.

Ensuite, vous ajoutez ret à offset en le faisant 3.

Dans le prochain appel à fun1 vous passer ce qui est color[offset]color[3] qui est "\0", notez que c'est pasNULL son une chaîne littérale contenant uniquement le caractère nul.

Pour clarifier:

char *str = NULL; // str is null pointer. 
char *str = 0;  // same as above. 

char *str = "\0"; // str is pointer to an empty string literal. 
char *str = ""; // same as above. 
0

Lorsque vous ajoutez à compenser, il va avancer par le nombre égal à ret. Donc, il avance de 3 places, ce qui l'amène à un décalage de 3, donc color[offset] = color[3] = "\0". Lorsque vous appelez fun1, il boucle pour toujours car il n'y a pas de caractères |. Cela continue jusqu'à ce que quelque chose de terrible et indéfini se produise.

Questions connexes