此功能是串表示二進制轉換爲字符串表示十六進制爲什麼我把這個函數調用了8次,所有的結果都是上次的?在C
char *tohex(char bnyin[32]) {
static char hexout[8];
int i=0;
int j=0;
for (i=0;i<8;i++){
char txt[4];
char hex;
txt[0] = bnyin[i*4+0];
txt[1] = bnyin[i*4+1];
txt[2] = bnyin[i*4+2];
txt[3] = bnyin[i*4+3];
switch (atoi(txt)) {
case 0: hex = '0'; break;
case 1: hex = '1'; break;
case 10: hex = '2'; break;
case 11: hex = '3'; break;
case 100: hex = '4'; break;
case 101: hex = '5'; break;
case 110: hex = '6'; break;
case 111: hex = '7'; break;
case 1000: hex = '8'; break;
case 1001: hex = '9'; break;
case 1010: hex = 'a'; break;
case 1011: hex = 'b'; break;
case 1100: hex = 'c'; break;
case 1101: hex = 'd'; break;
case 1110: hex = 'e'; break;
case 1111: hex = 'f'; break;
}
hexout[i] = hex;
}
return hexout;
}
主函數調用tohex功能8倍
int main (int argc, char**argv)
{
char *dl_hex[8];
char dl_bny[8][32];
for (i=0;i<8;i++) {
dl_hex[i] = tohex(dl_bny[i]);
}
}
for (i=0;i<8;i++) {
for (j=0;j<8;j++){
printf("%c",*(dl_hex[i]+j));
}
printf("\n");
}
打印出所有dl_hex後,所有的結果都具有相同的dl_hex [7],如果我將循環次數改爲6次,所有結果都是dl_hex [5],似乎無論我調用tohex函數多少次,所有結果都會進入最後一次。
歡迎堆棧溢出。 請注意,在這裏說'謝謝'的首選方式是通過 提高投票的好問題和有用的答案(一旦你有足夠的聲譽這樣做),並接受任何 問題最有用的答案,你問(這也給你一個小小的提升,以你的聲望 )。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) –