我想用wchar_t连接一个整数,在下面的方法中尝试过,但是崩溃了
const wchar_t mySalvo[10] = L"Group:"; // THis is global
int salvo = 0;
wchar_t buffer[1] = L"\n";
itoa(salvo, buffer, 1);
wcscat(mySalvo, buffer); // app crashes here
C中的IT
答案 0 :(得分:1)
此代码存在很多问题:
const wchar_t mySalvo[10] = L"Group:"; // THis is global
int salvo = 0;
wchar_t buffer[1] = L"\n";
itoa(salvo, buffer, 1);
wcscat(mySalvo, buffer); // app crashes here
wcscat
对其进行写入(您的编译器肯定会向您发出警告?)。wchar_t
元素,因此即使它不是只读的,它也足够存储3位数字。itoa
的第三个参数是数字底数,通常为10。具有数字底数1毫无意义。wcscat
写入一个常量字符串,即使该字符串足够长,它也是固定的。因此,您需要了解很多基础知识。字符串分配,内存初始化,数组,常量变量和常量文字,等等。
您要尝试做的只是产生一个格式化的字符串。 sprintf
family of string formatting functions提供了您可能需要的一切,以及一种安全的方式。
最简单的解决方案是这样的:
void show_message(unsigned salvo)
{
wchar_t message[64];
swprintf_s(message, sizeof(message), L"Group: %u\n", salvo);
// do something with message!
}
因此,如果您呼叫show_message(123)
,则message
中的结果值为:"Group: 123\n"
。
答案 1 :(得分:0)
mySalvo是const-由Chris发现。
最重要的是
wchar_t buffer[1] = L"\n";
itoa(salvo, buffer, 1); -
wcscat(mySalvo, buffer); // app crashes here
这是未定义的行为,因为您没有足够的空间容纳L"\n"
。这两个调用都调用UB。 itoa
不适用于wchar_t字符串。您需要找到适当的功能。
改为尝试wchar_t buffer[2] = L"\n";