将无符号字符数组返回到主函数

Posted

技术标签:

【中文标题】将无符号字符数组返回到主函数【英文标题】:Return unsigned char array to main function 【发布时间】:2019-06-25 10:14:44 【问题描述】:

背景:我原来的main()是:

int main(int argc, char *argv[])

    unsigned char output[16] = 0x00;  // copied from code

    // .... (some steps to calculate output[i])

    for (i = 0; i < 16; i++)
    
        printf("%02X ", output[i]); // output[i] is an array of 16-byte hex values
    

    return 0;

原始程序(例如calculate.c)通过命令行运行:

./calculate $(echo "this_is_input"|xxd -p)

现在我只想将 main() 修改为调用函数,例如,命名为 run()。并编写一个新的 main() 来调用 run() 函数。

输入(相当于上面的命令行)在 new main() 中被硬编码。 main() 会将输入值传递给 run() 函数(而不是使用上面的命令行)。

run(int argc, char *argv[])

    ....
    return output[i];

然后run()返回同样的输出[i]给main()

int main()

    input_char = **equivalent to $(echo "this_is_input"|xxd -p)** // how to define?

    unsigned char returned_output[16] = 0x00;

    returned_output = run(X, input_char);

    print(returned_output);

问题:

    如何在 main() 中呈现 $(echo "this_is_input"|xxd -p)** 的十六进制转储值?

    如何修改 run() 和 main() 以便将 unsigned char 数组返回给 main()?

【问题讨论】:

哦,这是 c... 这解释了一些东西 ;) 我忽略了 c 标签。请不要标记无关的语言。 C 和 C++ 有相似之处,但它们是两种不同的语言 如果您不使用argv[0],那么也许您可以将结果存储在那里?否则,你必须改变函数的格式。 我尝试将问题描述修改清楚。 @Lundin 肯定不是一个好主意,如果输出应该是 16 个字符,而 argv[0] 可能类似于 ./a.out @eerorika 你不需要使用来自main的实际argv,你可以使用你自己的char*数组和malloc/realloc。 【参考方案1】:
    如何在 main() 中呈现 $(echo "this_is_input"|xxd -p)** 的十六进制转储值?

您可以将其表示为字符数组,或者例如字符数组的数组 - 由空格标记。后者表示命令行参数已经在argv中。

    如何修改 run() 和 main() 以将 unsigned char 数组返回给 main()?

您必须声明函数的返回类型。在 C 中直接返回数组是不可能的,并且不希望复制数组。一个典型的解决方案是让调用者(main)创建数组,让被调用的函数修改数组的内容:

void run(int argc, char *argv[], unsigned char output[16])

main 有问题。它尝试分配一个数组。数组不可赋值。鉴于数组也不能从函数返回,这没什么意义。

这是我建议的调用方式:

unsigned char output[16] = 0x00;
run(argc, argv, output);

【讨论】:

以上是关于将无符号字符数组返回到主函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将无符号字符数组解析为数值数据

如何将无符号字符数组存储为浮点值?

套接字:将无符号字符数组从 C 传递到 JAVA

将无符号字符读入字符串

将无符号字符附加到向量会更改其值

如何在C中将无符号字符数组转换为十六进制字符串