[英]returning array of character pointer in C
我正在使用以下函數將十進制轉換為二進制
char** DEtoBinary(char HexDE[])
{
printf("HexDE = %s\n", HexDE);
int I;
char* deBinary[16];
for (I = 0; I <= 15; I++)
{
//deBinary = deBinary + Hex2Binary(HexDE.Substring(I, 1));
deBinary[I] = strcpy(deBinary, Hex2Binary(substring_added1(HexDE, I, 1)));
}
printf("deBinary = %s\n", deBinary);
return deBinary;
}
十六進制轉二進制函數
char *Hex2Binary(char* DE)
{
printf("Inside DE = %s\n", DE);
char *myBinary;
long val = strtol(DE, NULL, 16);
switch(val)
{
case 0:
myBinary = "0000";
break;
case 1:
myBinary = "0001";
break;
case 2:
myBinary = "0010";
break;
case 3:
myBinary = "0011";
break;
case 4:
myBinary = "0100";
break;
case 5:
myBinary = "0101";
break;
case 6:
myBinary = "0110";
break;
case 7:
myBinary = "0111";
break;
case 8:
myBinary = "1000";
break;
case 9:
myBinary = "1001";
break;
case 10: //A
myBinary = "1010";
break;
case 11: //B
myBinary = "1011";
break;
case 12://C
myBinary = "1100";
break;
case 13://D
myBinary = "1101";
break;
case 14://E
myBinary = "1110";
break;
case 15: //F
myBinary = "1111";
break;
}
printf("myBinary = %s\n" ,myBinary);
return myBinary;
}
在 Hex2Binary 函數中,myBinary 正確返回,但我需要將整個二進制轉換字符串發送到 char* DEtoBinary(char HexDE[]) 的原始調用者
原來的來電者是
de1Binary = DEtoBinary(DE[0]);
例如我的 DE[0] = E234567787888888
預期是 111000100011 ....... 但我只得到最后一個十六進制值的二進制值,即 8 是 1000
我仍然認為錯誤的幾件事是::
deBinary[I] = strcpy(deBinary, Hex2Binary(substring_added1(HexDE, I, 1)));
您再次將char*
復制到char**
這不是一個好主意。 可能你會嘗試像 ::
strcpy(deBinary[I], Hex2Binary(substring_added1(HexDE, I, 1)));
檢查這個 ::strcpy() 返回值
所以,我認為沒有必要保存strcpy
返回的值。
此外,在您的打印聲明中,您打印
printf("deBinary = %s\n", deBinary);
其中deBinary
又是一個char**
:P 但是,據我所知,它只打印前 4 個二進制數字是因為它在第一個二進制表示的末尾遇到了\\0
。
所以,也許你應該嘗試做:
for(int i = 0; i < 16; i++) {
printf("%s ", deBinary[i]);
}
這實際上可能會解決您的問題。
此外,在你的代碼中,你聲明了這樣的東西, char* deBinary[16];
,這是16的陣列char*
這意味着可以存儲16個的地址char
數組,但是INFACT您使用strcpy
復制從返回的字符串Hex2Binary
到指向的位置由deBinary[i]
其還沒有被分配任何存儲器,因此您將字符復制到從未分配的內存中,這是一個壞主意(但可能適用於您的設備),因此建議您將deBinary
聲明為char deBinary[16][5]
或者,而不是使用strcpy
,只需復制Hex2Binary
返回的地址,如
deBinary[i] = Hex2Binary( ... );
因為據我所知,當您向分配給常量內存的char*
聲明類似"1100"
,可能會起作用。 (我不確定這一點,如果有人可以對此發表評論並提供幫助,那就太好了)。
我希望這會有所幫助!
編輯 ::
此外,再次談論deBinary[]
,您在本地聲明了一個char**
並從函數中返回它,這是錯誤的,因為在函數調用結束后,所有聲明的變量都被廢棄,因為函數調用退出了堆! 因此,如果您不需要main
的轉換數組,您可以嘗試將函數的類型更改為void
。 或者,嘗試動態分配deBinary
或在main
分配自身並將其作為參數傳遞給函數DEtoBinary
。
你混淆了char *
和char **
; Hex2Binary(char*)
的返回類型是char **
,但你返回的是char *
; DEtoBinary(char[])
的返回類型是char *
,但您返回的是char **
;
記住:
char *val
與char valp[]
相同;
char *val[]
與char **val
相同;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.