我正在尝试将数组 a 中的十六进制值转换为二进制值,并将转换后的值分配给数组 b,然后打印数组 b。但是数组 b 中的所有值都相同。输出是:
111100001011000100010111101010001101 111100001011000100010111101010001101 111100001011000100010111101010001101
如果我使用 b[i] = strdup(hexToBin(a[i]));
而不是 b[i] = hexToBin(a[i]);
输出将是:
111100001011 111100001011000100010111 111100001011000100010111101010001101
这是关于指针的吗? Char * 是一个指针,它指向字符串的第一个字符,是否打印指针之后的所有字符?什么是正确的做法?
#include <stdio.h>
#include <string.h>
char bin[100] = "";
char * hexToBin(char hex[50]);
int main(void) {
char * a[] = {
"f0b",
"117",
"a8d",
};
char * b[3];
for(int i = 0; i < 3; i++) {
b[i] = hexToBin(a[i]);
}
for(int i = 0; i < 3; i++) {
printf("%s\n", b[i]);
}
}
char * hexToBin(char hex[50]) {
for(int i=0; hex[i]!='\0'; i++)
{
switch(hex[i])
{
case '0':
strcat(bin, "0000");
break;
case '1':
strcat(bin, "0001");
break;
case '2':
strcat(bin, "0010");
break;
case '3':
strcat(bin, "0011");
break;
case '4':
strcat(bin, "0100");
break;
case '5':
strcat(bin, "0101");
break;
case '6':
strcat(bin, "0110");
break;
case '7':
strcat(bin, "0111");
break;
case '8':
strcat(bin, "1000");
break;
case '9':
strcat(bin, "1001");
break;
case 'a':
case 'A':
strcat(bin, "1010");
break;
case 'b':
case 'B':
strcat(bin, "1011");
break;
case 'c':
case 'C':
strcat(bin, "1100");
break;
case 'd':
case 'D':
strcat(bin, "1101");
break;
case 'e':
case 'E':
strcat(bin, "1110");
break;
case 'f':
case 'F':
strcat(bin, "1111");
break;
default:
printf("Invalid hexadecimal input.");
}
}
return bin;
}
最佳答案
hexToBin
函数返回指向全局 bin
数组第一个元素的指针。 每次!。
这意味着 b
中的所有指针都将是指向 bin
数组中相同第一个元素的相同指针。
如果您知道字符串的最大长度,我建议您将 b
设为 arrays 的 char
数组。例如
char b[3][500]; // 3 arrays of 499-character strings (+1 for the null-terminator)
然后不是 hexToBin
返回指向单个全局数组的指针,而是将指向要填充的字符串的指针作为参数传递给 hexToBin
:
void hexToBin(char *hex, char *bin);
并将其命名为
hexToBin(a[i], b[i]);
关于c - 将 char * 数组中的字符串分配给另一个 char * 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55183975/