我有五个向量,我在这个函数中改变它们的值
标题:
char *lfsr(char *bin);
char *saveToArray(FILE *hexFile);
char *hexToBinary(char *hex);
我改变了他们的价值观:
FILE *hexFile = fopen("hex.txt", "rb"); //recebido pela consola
char *seed;
char *x0, *y0, *z0, *dT0;
seed = saveToArray(hexFile);
x0 = hexToBinary(seed);
y0 = lfsr(x0);
z0 = lfsr(y0);
dT0 = lfsr(z0);
这是lfsr函数:
char* lfsr(char *bin)
{
//bits significativos para fazer o xor 128 -> 128,126,101,99;
int bits[4];
int bit;
if(bin[0] == '0')
bits[0] = 0;
else if(bin[0] == '1')
bits[0] = 1;
if(bin[2] == '0')
bits[1] = 0;
else if(bin[2] == '1')
bits[1] = 1;
if(bin[21] == '0')
bits[2] = 0;
else if(bin[21] == '1')
bits[2] = 1;
if(bin[19] == '0')
bits[3] = 0;
else if(bin[19] == '1')
bits[3] = 1;
bit = bits[0] ^ bits[1] ^ bits[2] ^ bits[3] ^ 1;
//reconstruir o vector de char depois do lfsr
for(int i = 127; i >= 1; i--)
{
bin[i] = bin[i - 1];
}
bin[0] = (char)(48 + bit);
return bin;
}
问题是,x0
,y0
和z0
的值最终会与dT0
相同。
我该怎么做才能避免这种情况?
答案 0 :(得分:1)
您从bin
函数返回参数lfsr
。这个指针总是一样的。所以你真正做的是让所有变量指向同一个位置。
所以当你这样做时
y0 = lfsr(x0);
您将y0
指向x0
已指向的内容。当你做的时候
z0 = lfsr(y0);
你让z0
指向y0
指向的内容,因为它已经指向x0
所指向的内容,这与制作z0
点相同同样如此。
如果您打印出指针,您会看到它们都具有完全相同的值。
解决此问题的一种简单方法是将所有变量(x0
,y0
等)数组生成,然后将它们作为参数传递。
答案 1 :(得分:0)
* x0,* y0,* z0,* dT0
的第一个malloc内存然后使用临时指针返回函数。
像
char *pTmp
pTmp= hexToBinary(seed);
然后将pTmp的内容相应地memcpy到x0,y0,z0,dT0。
memcpy(x0,pTmp,size);
你应该找到一些方法来弄清楚文件的大小。