我有以下代码:
wchar_t recordsText[64] = L"Records: ";
std::wstringstream ss2;
ss2 << c;
wcsncat_s(recordsText, ss2.str().c_str(), sizeof(ss2.str().c_str()));
((CButton*)GetDlgItem(IDC_RECORDS))->SetWindowTextW(recordsText);
它工作得很好,但我想将它放入一个函数中……我认为没有比这更容易的了。但是我得到了一个愚蠢的错误。
我的功能是这个:
BOOL refreshTextField(CButton* item, wchar_t* label, long long* number){
std::wstringstream ss;
ss << number;
wcsncat_s(label, ss.str().c_str(), sizeof(ss.str().c_str()));
item->SetWindowTextW(label);
return true;
}
但是 wcsncat_s 不喜欢我的“标签”,因为它是一个数组,函数是这样调用的:
refreshTextField(((CButton*)GetDlgItem(IDC_SENT_PACKAGES)), L"Packages send: ", &sentPackages);
(顺便说一句:我知道它不应该被转换为 CButton,因为它是一个编辑字段 :-D ,但目前这并不重要。)
问题是 wchar_t 数组,我不知道如何将它正确地放入我的函数中。希望你能给我一个退出的答案。
我已经试过了:
BOOL refreshTextField(CButton* item, wchar_t** label, long long* number){
//...
wcsncat_s(*label, sizeof(*label), ss.str().c_str(), sizeof(ss.str().c_str()));
//....
}
还有这个:
BOOL refreshTextField(CButton* item, wchar_t* label, long long* number){
//...
wcsncat_s(label, sizeof(*label), ss.str().c_str(), sizeof(ss.str().c_str()));
//....
}
编辑:
所以解决方案是这样的:
调用:
refreshTextField(mySelectedUIItem, L"testlabel", sizeof(L"testlabel"), 4);
功能:
BOOL refreshTextField(CButton* item, wchar_t* label, size_t lableSize, long long* number)
{
std::wstringstream ss;
ss << number;
wcsncat_s(label, labelSize, ss.str().c_str(), ss.str().length());
//...
}
最佳答案
{编辑}
当你要使用函数模板时,你必须匹配所有的参数类型。因此,您必须将字符串的长度而不是 c_str() 结果的第二个拷贝传递给 wcsncat_s 模板:
wcsncat_s(recordsText, ss2.str().c_str(), ss2.str().length());
这将解析为原型(prototype)
template <size_t size>
errno_t _mbsncat_s(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count
); // C++ only
{/编辑}
如果没有模板,则适用以下内容:
您不能将数组传递给函数。该函数将只接受指针。使用函数内部的指针可以很好地访问数组。但是您丢失了有关数组大小的信息。
因为指针只指向你不能使用的数组的第一个元素
sizeof(*somePointer);
因为这会给出第一个数组元素的大小。
需要修改refreshTextField的参数列表。由于 label
参数指向一个输出变量,因此您需要将该变量的大小作为附加参数。例如:
BOOL refreshTextField(CButton* item, wchar_t* label, size_t lableSize, long long* number)
{
std::wstringstream ss;
ss << number;
wcsncat_s(label, labelSize, ss.str().c_str(), ss.str().length());
//...
}
关于C++ wchar_t 数组到指针和函数用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456327/