簡體   English   中英

在 C 中返回字符指針數組

[英]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 *valchar valp[]相同;

char *val[]char **val相同;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM