使用sprintf将更改指定的变量

dom*_*lao 0 c++

我有一个代码,

char* bin2hexchar( const unsigned char& ibin, char* pbcd )
{
    sprintf( pbcd, "%02X", ibin );

    return pbcd;
}
Run Code Online (Sandbox Code Playgroud)

问题是,ibin变量的值将变为零值.

请指教.

谢谢

pax*_*blo 11

如果您ibin在调用者中将此值更改为此值,则最可能的解释是缓冲区溢出.

我怀疑这可能是因为你传递的缓冲区作为第二个参数被定义如下:

char buff[2];
Run Code Online (Sandbox Code Playgroud)

并且ibin在堆栈上与它相邻.

%02X格式串需要3个字节,两个用于字符和一个用于终止NUL字符.

即使这不是特定情况,它仍然几乎肯定是缓冲区溢出.如果是这样,请发布调用此函数的代码以及相关变量的定义.