2012-04-02 9 views
29

Cuando estoy ejecutando este programa recibo una advertencia "el subíndice de matriz tiene el tipo 'char'". Por favor, ayúdenme a dónde va mal. Estoy usando Code :: Blocks IDEAdvertencia: el subíndice de matriz tiene el tipo char

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <string.h> 
void NoFive() 
{ 
    long long int cal; 
    char alpha[25]; 
    char given[100] = "the quick brown fox jumped over the cow"; 
    int num[25]; 
    int i, k; 
    char j; 
    j = 'a'; 
    k = 26; 
    cal = 1; 
    for(i = 0; i <= 25; i++) 
    { 
     alpha[i] = j++; 
     num[i] = k--; 
     // printf("%c = %d \n", alpha[i], num[i]); 
    } 
    for(i = 0; i <= (strlen(given) - 1); i++) 
    { 
     for(j = 0; j <= 25; j++) 
     { 
     if(given[i] == alpha[j]) ***//Warning array subscript has type char*** 
     { 
      cal = cal * num [j]; ***//Warning array subscript has type char*** 
     } 
     else 
     { 

     } 
     } 
    } 
printf(" The value of cal is %I64u ", cal); 
} 

main() 
{ 
NoFive(); 
} 
+3

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html Explicará por qué esto es una advertencia. –

+0

'for (i = 0; i <= 25; i ++)' también es incorrecto (dos veces). Debe ser 'for (i = 0; i <25; i ++) {...}' La matriz tiene 25 elementos. Y 'para (i = 0; i <= (strlen (given) - 1); i ++)' es discutible. – wildplasser

Respuesta

53

simple, cambie

char j; 

a

unsigned char j; 

o simplemente una llanura (u)int

unsigned int j; 
int j; 

De GCC Warnings

-Wchar-subscripts Avisar si un subíndice de matriz tiene el tipo char. Esta es una causa común de error, ya que los programadores a menudo se olvidan de que este tipo es firmado en algunas máquinas. Esta advertencia es habilitada por -Wall.

El compilador no quiere que especifique inadvertidamente un índice de matriz negativo. Y de ahí la advertencia!

+1

Muchas Gracias, Ya Entendí el problema ... –

+5

El uso de un índice de matriz de tipo 'int' does ** not ** no da lugar a ninguna advertencia, aunque también permitiría índices negativos ... @Pavan Manjunath – alk

+0

@alk Ahh. Fue un error tipográfico Quise decir 'unsigned char' que simplemente' unsigned'. De todos modos, solo estaba señalando los índices negativos. Sin embargo, edité mi publicación para que quede claro para los futuros visitantes :) –

Cuestiones relacionadas