c - 将整个 unsigned char 数组返回给 main

标签 c arrays pointers return-value

下面的 Current main() 正在运行,用于修改输入数组的大小和值,并生成输出数组。

int main()
{
    unsigned char input_text[] = {0x00, 0x01, 0x02 ....};
    int ilength = sizeof(input_text)/sizeof(input_text[0]);

    int *olength;
    olength = &ilength;
    unsigned char* output_text = (unsigned char*)malloc(sizeof(unsigned char)*(*olength));

    int option = 1;
    switch(option)
    {   // array size and some elements values will be changed below
     case 1:
        change_output_method_1(&output_text, input_text, ilength, olength);
        // void change_output_method_1(unsigned char** output, unsigned char* input, int inlen, int *olen);
    }

    return 0;
}

现在,我想将上面的 main() 修改为一个名为 change( ) 的调用函数,它从 new main( ) 中读取 input_text 和 option 值,并将 output_text 值返回给 new main()。

当然,创建另一个新的 main( ) 来调用 change( )。

unsigned char* change(unsigned char input_text, int option)
{
    int ilen = sizeof(input_text)/sizeof(input_text[0]);

    (same as before)

    return output_text;
}

int main()
{
    int opt = 1;
    unsigned char input[] = {same};

    unsigned char output[] = change(input, opt);
    // IMPORTANT: output[] size is unknown before receiving the return value from change( )
}

由于指针问题,我在定义字符数组时遇到了一些错误。如何修改新代码?

最佳答案

这不起作用:

unsigned char output[] = change(input, opt);

...

unsigned char* change(unsigned char input_text, int option)

您不能将数组传递给您的 change 函数。您必须传递一个指向数组的指针(技术上准确地说:指向数组的第一个元素),以及大小:

unsigned char output[] = change(input, sizeof(input), opt);

...

unsigned char* change(unsigned char *input_text, int ilen, int option) {

此外,您也不能返回数组。例如,您可以返回动态分配的缓冲区并在输出参数中传递输出缓冲区的大小:

int output_size;
char *output = change(input, sizeof(input), &output_size, opt);

...

unsigned char* change(unsigned char *input_text, int ilen, int *olen, int option) {
    char *ret = malloc(SIZE);
    *olen = SIZE;

    return ret;
}

当然还有其他的可能,具体要看具体情况。

关于c - 将整个 unsigned char 数组返回给 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57200559/

相关文章:

c - 在 c 中重新分配的正确方法

javascript - React js 简单获取 json 并列出内容 "TypeError: this.state.items.map is not a function"

c# - 将列表框项目转换为数组整数 C#

c - 删除列表中的最后一个元素

c - 如何向现有管道 GstElement 添加多个过滤器?

c - 在 c 中生成阿姆斯特朗数到第 n 个数不起作用

c - 打印编译时保存的文件名

Javascript 遍历 <li> 列表并分配事件(onitemclick)处理程序不起作用 - 为什么?

c++ - 为什么二维Array中的Range for要这样写?

python - 是否可以获得列表成员的指针?