Code Bye

关于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”};之后,本人输入F,最后print出来的是0,这是为什么呢?
解决方案

20

char data[15]={“0″,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,”A”,”B”,”C”,”D”,”E”,”F”};
改成:
char data[16]={“0″,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,”A”,”B”,”C”,”D”,”E”,”F”};
里面是有16个元素

10

你改成char[15]照理说会出现编译错误,原因是你初始化的时候超过了数组边界

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C语言中数组大小的一个问题