在C语言中返回字符指针数组

在C语言中返回字符指针数组,c,pointers,C,Pointers,我正在使用下面的函数将十进制转换为二进制 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]

我正在使用下面的函数将十进制转换为二进制

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;

}
在Hex2二进制函数中, myBinary正在正确返回,但我需要将整个二进制转换字符串发送给char*DEtoBinarychar HexDE[]的原始调用者

最初的来电者是

de1Binary = DEtoBinary(DE[0]);
范例 我的DE[0]=E2345677878888

预计为111000100011。。。。。。。。。。。
但我只得到最后一个十六进制值的二进制值,即8是1000

您混淆了char*和char**; Hex2Binarychar*的返回类型为char**,但返回char*; DEtoBinarychar[]的返回类型为char*,但返回char**

记住:

char*val与char valp[]相同


char*val[]与char**val相同

我仍然认为错误的事情很少:

deBinary[I] = strcpy(deBinary, Hex2Binary(substring_added1(HexDE, I, 1)));
您再次将字符*复制到字符**,这不是一个好主意。也许你应该试试这样的东西:

strcpy(deBinary[I], Hex2Binary(substring_added1(HexDE, I, 1)));
检查此项::

因此,我认为没有必要保存strcpy返回的值

此外,在打印报表中,您打印

printf("deBinary = %s\n", deBinary);
其中deBinary又是一个字符**:p 但是,据我所知,它只打印前4个二进制数字是因为它在第一个二进制表示的末尾遇到\0

所以,也许你应该试着做:

for(int i = 0; i < 16; i++) {
    printf("%s ", deBinary[i]);
}
因为据我所知,当你将类似1100的东西声明为一个char*时,它被分配给常量内存,可能会工作。我不确定这一点,如果有人可以评论这一点,并帮助它将是伟大的

我希望这能有所帮助

编辑::


此外,再次谈到deBinary[],您在本地声明了一个char**并从函数返回它,这是错误的,因为在函数调用结束后,所有声明的变量都被废弃,因为函数调用从堆栈中退出!因此,如果在main中不需要转换的数组,可以尝试将函数的类型更改为void。或者,尝试动态分配deBinary,或者在main中分配自身,并将其作为参数传递给函数DEtoBinary。

DEtoBinary的代码甚至不会编译。您的函数返回类型是char*,您正在返回一个char**您发布的代码包含太多不一致的内容,例如返回char*、deBinary[I]=strcpy和strcpychar**、char**;的Hex2Binary的char**;。请张贴实际代码。我不明白它怎么会对你有用。它正在编译。但我错了。我更正为char*。我将在我的原始PostVote中编辑以关闭。发布一些我们可以编译的东西。我认为你的编译器有问题,如果你可以在ideone.com上发布你所有的代码,如果它可以工作,那么也可以共享链接,我想是的,我注意到了我的错误。
for(int i = 0; i < 16; i++) {
    printf("%s ", deBinary[i]);
}
deBinary[i] = Hex2Binary( ... );