2012-04-02 26 views
29

当我运行此程序时,我收到警告“数组下标具有类型'char'”。 请帮我,它出错了。我使用的代码::块IDE警告:数组下标具有类型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将阐明为什么这是一个警告。 – 2012-04-02 07:27:08

+0

对于(i = 0; i <= 25; i ++)'也是错误的(两次)。应该是'for(i = 0; i <25; i ++){...}'数组有25个元素。而'for(i = 0; i <=(strlen(given) - 1); i ++)'是有争议的。 – wildplasser 2012-04-26 18:15:23

回答

53

简单,改变

char j; 

unsigned char j; 

,或者只是一个普通(u)int

unsigned int j; 
int j; 

GCC Warnings

-Wchar-subscripts如果数组下标具有char类型,则发出警告。这是错误的常见原因,因为程序员经常忘记这种类型是 在某些机器上签名。此警告由-Wall启用。

编译器不希望你不小心指定负数组索引。因此警告!

+1

非常感谢这个问题... – 2012-04-02 07:48:53

+5

使用'int'类型的数组索引不会导致任何警告,尽管它也会允许负向索引... @Pavan Manjunath – alk 2012-04-26 17:04:40

+0

@alk啊。这是一个错字。我的意思是'unsigned char'而不是'unsigned'。无论如何,我只是提出负面指标。尽管如此,我编辑了我的帖子,以便将来的访问者清楚:) – 2012-04-26 18:03:04

相关问题