关于C语言数组的一个问题

 /*问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535*/

#include <stdio.h>
#include<string.h>
#define MAXSIZE 10
char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main(){
    int len, i, j, k, m;
    long z=0;
    char input[MAXSIZE];
    scanf("%s", &input);
    len=strlen(input);
    for(i=0;i<len;i++){
        for(k=0;k<16;k++){
            if(input[i] == data[k]){
                m=k;
                break;
            }
        }
        for(j=0;j<len-i-1;j++){
            m*=16;  
        }
        z+=m;
    }
    printf("%I64d",z);
    return 0;
}

这样是正确的,但是如果我把char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};改成char data[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};之后,输入Fprint出来就是0.这是为什么呢?

char data[] 的方式声明字符数组时,后面有多少个字符该变量就有多少个字符长度;
如果 char data[15]的话,说明此字符数组只有十五个变量空间.遍历数组的时候找不到你输入字符 F,根据你的函数逻辑,最后的结果就是 0