我制作了以下一段代码,通过函数intToBits将char转换为位数组:
typedef unsigned char poly8;
typedef unsigned long long poly8x64[8];
char* intToBits(unsigned k) {
int i;
char *nk = malloc(8);
for(i=7;i>=0;i--){
nk[i] = (k%2);
k = (int)(k/2);
printf("nk= %d n", nk[i]);
}
return *nk;
}
void poly8_bitslice(poly8x64 r, const poly8 x[64])
{
//TODO
int i;
for(i=0;i<64;i++)
{
printf("x= %d n", x[i]);
char* mem = intToBits(x[i]);
printf("bufer= %d n", *mem);;
}
}
int main()
{
poly8 a[64], b[64], r[64];
poly8x64 va, vb, vt;
int i;
FILE *urandom = fopen("/dev/urandom","r");
for(i=0;i<64;i++)
{
a[i] = fgetc(urandom);
b[i] = fgetc(urandom);
}
poly8_bitslice(va, a);
poly8_bitslice(vb, b);
fclose(urandom);
return 0;
}
但是,在打印时,我收到分段失败错误。我不知道该怎么办。指针不正确吗?我只想打印intToBits的结果。
罪魁祸首是intToBits
中的这一行:
return *nk;
它返回一个char
而不是一个char*
,如果你打开编译器警告,编译器会通知你。
将其更改为:
return nk;