将无符号字符数组返回到主函数
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);
【讨论】:
以上是关于将无符号字符数组返回到主函数的主要内容,如果未能解决你的问题,请参考以下文章