为什么在执行某些相关代码后更改了此char数组?

时间:2016-10-28 19:39:57

标签: c arrays string

首先有一个函数将char数组转换为char数组:

char *tohex(char bnyin[32]) {

    static char hexout[8];
    ....
    return hexout;
}



char hex[8]   = "00000000";
char bny[32]  = "00000000000000000000000000000000";
int num = 20;
int remap_bf[21];

for (i=0;i<num;i++)
{
    bny[remap_bf[i]]='1';
}

strncpy(hex, tohex(bny),8);
printf("%s", hex);
printf("\n");

此时我可以打印出关于char hex的正确结果,但之后,

int bkn[8];
int bfn[8];
int num = 20;

for (i=0;i<num;i++) {
    bkn[i] = remap_bf[i] / 8;
    bfn[i] = remap_bf[i] % 8;
}

printf("%s", hex);
printf("\n");

虽然这次它只打印任何东西或奇怪的角色。由于代码的第二部分不影响十六进制数组,为什么它会丢失?有趣的是,当num为8时,两个打印看起来都是正确的,但是当num变为20时,第二个打印得不到任何东西。

0 个答案:

没有答案