如何解决数组类型'char [n]'和'uint8 [n]'是不可分配的
我正在尝试转换两种类型的值:char
和uint8
。
我有一个函数someFunction(TLabel *label,TEdit *edit)
。在此函数中,我有一个变量char var[6+1]
。
我要做什么:
获取字母数字文本(输入TEdit *edit
),转换该文本并将其放入var
内。
我知道,如果我调用此函数并将*label
和*edit
放进去,我可以得到我想要的任何东西,但是问题是将*edit
的文本与var
。
我的代码示例(在函数内部):
char var[6+1];
label->Text = "Some text";
var = edit->Text;
//I will put var value inside of an another char (like a #define) that is in a struct,but doesn't matter for now
my_struct.valueOfVar = var;
我还有另一个函数,它是相同的代码,但是上面的valueOfVar
是uint8
,我也不能转换它:
uint8 valueOfAnotherVar[6+1];
解决方法
问题不在于数组中元素的类型,而在于您不能像这样将一个静态数组分配给另一个:
char a[7];
uint8 b[7];
a = b; // error
相反,如果要复制数组中的值,可以像这样使用std::copy
:
std::copy(std::begin(b),std::end(b),std::begin(a));
如果有动态数组,仍然可以使用std::copy
,但必须使用数组的大小:
std::copy(b,b + N,a);
请确保a
和b
都至少指向N
个元素,否则您将调用未定义的行为。
Text
或TLabel
中的TEdit
是System::String
,它是C ++ Builder 2007和更早版本中System::AnsiString
的别名,并且适用于C ++ Builder 2009及更高版本中的System::UnicodeString
。您没有说出使用的是哪个版本,但这在您的示例中有很大的不同。
您不能像尝试使用char[7]
那样直接将{em>任何分配给固定数组,例如uint8[7]
或operator=
。您需要将String
数据转换并复制到数组的分配内存中,例如:
char var[6+1] = {};
label->Text = "Some text"; // OK - String has a constructor for 'const char*'
// if using CB2007 or earlier:
strncpy(var,edit->Text.c_str(),6);
// if using CB2009 or later:
strncpy(var,AnsiString(edit->Text).c_str(),6);
然后您可以使用其中之一将var
的内容复制到valueOfVar
中:
memcpy(my_struct.valueOfVar,var,7);
std::copy(var,var+7,my_struct.valueOfVar);
std::copy_n(var,7,my_struct.valueOfVar);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。