【发布时间】:2020-03-27 17:12:40
【问题描述】:
我正在构建一个将十六进制转换为二进制的程序,我为此使用char,因为稍后在我的程序中我需要将二进制文件分成不同的部分。所以使用字符是我认为最简单的方法。
我是 C 的新手,所以请耐心等待。用户必须输入一个十六进制数字,然后将其传递给我的函数。我使用 if/else 来获取 char 数组中每个 char 的二进制文件。所以如果用户输入30,那么我想返回像“00110000”这样的字符数组,但是我得到了分段错误错误。
有谁知道为什么以及如何解决这个问题?另外我收到警告说传递参数 1 pf strcopy 使指针从整数而不进行强制转换?
char *hextobin(char *hex, int m);
int main(int argc, char **argv) {
int m = 8;
char *address;
printf("Enter an hex: ");
scanf("%s", address);
address = hextobin(address, m);
return 0;
}
/*convert hexadecimal to binary*/
char *hextobin(char *hex, int m) {
char p[m - 1];
int i = 0;
while (hex[i] != '/0') {
if (hex[i] == '0') {
strcpy(p[i], "0000");
} else if (hex[i] == '1') {
strcpy(p[i], "0001");
} else if (hex[i] == '2') {
strcpy(p[i], "0010");
} else if (hex[i] == '3') {
strcpy(p[i], "0011");
} else if (hex[i] == '4') {
strcpy(p[i], "0100");
} else if (hex[i] == '5') {
strcpy(p[i], "0101");
} else if (hex[i] == '6') {
strcpy(p[i], "0110");
} else if (hex[i] == '7') {
strcpy(p[i], "0111");
} else if (hex[i] == '8') {
strcpy(p[i], "1000");
} else if (hex[i] == '9') {
strcpy(p[i], "1001");
} else if (hex[i] == 'a') {
strcpy(p[i], "1010");
} else if (hex[i] == 'b') {
strcpy(p[i], "1011");
} else if (hex[i] == 'c') {
strcpy(p[i], "1100");
} else if (hex[i] == 'd') {
strcpy(p[i], "1101");
} else if (hex[i] == 'e') {
strcpy(p[i], "1110");
} else if (hex[i] == 'f') {
strcpy(p[i], "1111");
} else
printf("Invalid Hex!!\n");
i++;
}
return p;
}
【问题讨论】:
-
p[i]的类型为char。你想要一个指针。 -
您忘记为字符串分配内存。在 main 中,
address是一个未定义的值。 -
p[i]是i位置的字符,您可以使用&p[i]之类的东西,这是该字符的地址,但是对于每个输入的十六进制字符,您必须将索引移动到输出二进制字符 4。顺便说一句:else if的系列更容易写成switch-case。 -
同样返回分配在堆栈上的
p总是错误的。 -
另外,在
hextobin中,您尝试返回局部变量的地址。你不能这样做,因为从函数返回时变量不再存在。
标签: c