将字符数组作为参数发送给C ++中的函数

时间:2018-10-26 18:00:40

标签: c++

我有一个接收两个参数的函数:一个输入和一个输入/输出,第一个是常量类型string,第二个是对array的{​​{1}}的引用字符,问题在于当我传递数组的地址时,在编译unsigned char

时会产生此错误

这是我调用该函数的代码:

initial value of reference to non-const must be an lvalue

这是函数:

unsigned char in[20];
string str = "ABCDEF123456";

function(str, &in); //ERROR HERE

注意:函数的作用是将变量void function(const std::string &str, unsigned char *&in) { in = new unsigned char[str.length() / 2]; for (int aux = 0, tam_str = str.length(); aux != tam_str; aux += 2) { std::stringstream ss; ss << std::hex << str.substr(aux, 2); int valor; ss >> valor; in[aux / 2] = valor; } } (十六进制值)的内容转换为字符数组str

1 个答案:

答案 0 :(得分:2)

参数声明的类型与您传递的对象的类型不匹配。

回答新问题:

就像在旧版本中一样,您将一个指针传递给20个无符号字符的数组。但是参数类型是对指向无符号字符的指针的引用。那是行不通的。

要调用该函数,必须有一个指向未签名字符的指针:

unsigned char* ptr = in;
function(str, ptr);

另一方面,除非修改指针,否则按引用传递指针是没有意义的。因此,改为传递指针的副本可能更明智:

void function(const std::string &str, unsigned char *in);

function(str, in);

旧答案:

void function(const std::string &str, std::vector<unsigned char> &in)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
unsigned char in[20];
^^^^^^^^^^^^^^^^^^^^
function(str, &in); //ERROR HERE
              ^^^

已声明该函数接受对std::vector<unsigned char>对象的引用。您尝试将地址传递给20个无符号char数组作为参数。那是行不通的。

要调用该函数,您需要一个向量对象:

std::vector<unsigned char> in;
function(str, in);