这是工作原始代码:
// ...
unsigned __int64 num = 57;
sprintf_s(buffer, sizeof(buffer), "%llu", num);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将此部分提取到此函数中时:
void addBuffered(void** attributeValue, char* format)
{
sprintf_s(buffer, sizeof(buffer), format, *attributeValue);
}
Run Code Online (Sandbox Code Playgroud)
致电:
addBuffered((void**)&num, "%d");
Run Code Online (Sandbox Code Playgroud)
我必须要改变的格式参数sprintf_s从%llu以%d得到正确的值.有人可以解释为什么会发生这种情况,如果参数的变化%d可能是个问题吗?谢谢!
这是因为sizeof(void *) == 4在你的情况下.你通过函数调用隐式地__int64转换void *.因此,如果您使用%llu格式,则从内存中打印一些垃圾.
如果有可能,我建议你重写功能:
template <typename T>
void addBuffered(T *attributeValue, char* format)
{
sprintf_s(buffer, sizeof(buffer), format, *attributeValue);
}
Run Code Online (Sandbox Code Playgroud)
电话示例:
addBuffered(&num, "%luu");
Run Code Online (Sandbox Code Playgroud)