【发布时间】:2020-10-07 22:45:28
【问题描述】:
我想知道您是否可以帮助我克服我在使用 C 语法时遇到的障碍。我写了函数:
binary_and_trim(char *password, unsigned *key1, unsigned *key2)
这已经实现了将提供的字符串转换为二进制并修剪掉前导零的目标。我已将我的 key1 和 key2 指针分配给正确的索引。但是,当我返回主函数时,所有值都丢失了。
我认为问题在于,当我将 *key1/*key2 指针传递给函数时,它只会收到它们的副本。但是,由于我是 C 新手,我不知道如何解决它?
我创建了一个 for 循环来帮助我进行测试/调试。
#include <stdio.h>
#include <string.h>
void binary_and_trim(char *password, unsigned *key1, unsigned *key2);
unsigned int get_n_bits(unsigned *bits, int width, int index);
int main(int argc, const char * argv[]) {
unsigned *key1 = NULL;
unsigned *key2 = NULL;
binary_and_trim("password", key1, key2);
//This test fails with a EXC_BAD_ACCESS error
for(int i = 0 ; i < 28; i++){
printf("key1[%d] %u key2[%d] %d\n", i, key1[i], i, (key2 + i));
}
}
void binary_and_trim(char *password, unsigned *key1, unsigned *key2){
char c;
int count = 0;
unsigned tmp;
unsigned long len = strlen(password);
unsigned trimmedbinary[len * 7];
for(int i = 0; i < len; i++){
c = *(password + i);
for( int j = 6; j >= 0; j--) {
tmp = 0;
if(c >> j & 1){
tmp = 1;
}
*(trimmedbinary + count) = tmp;
count++;
}
}
key1 = trimmedbinary;
key2 = &trimmedbinary[28];
//This test works correctly!!!
for(int i = 0 ; i < 28; i++){
printf("key1[%d] %d key2[%d] %d\n", i, *(key1 + i), i, *(key2 + i));
}
}
【问题讨论】: