首页 > 解决方案 > 字符串函数返回奇怪的值

问题描述

我有一个函数返回一个字节的二进制表示:

std::string ToBinary(unsigned char &Num)
{
    char str[8];
    char Symb = 0;
    int i = 0;
    while (i<8)
    {
        _asm
        {
            //push al
            shr byte[Num], 1
            mov al, 0
            adc al, 30h
            mov byte[Symb], al
            //pop al
        }
        str[7-i] = Symb;
        i++;
    }
    return std::string(str);
}

它的调用:

std::string BinOut = ToBinary(ByteValue);

问题是它没有得到一个 8 字符的字符串,而是返回 14 字符的字符串。显然,函数 str 内部显示了正确的值。如何让它返回 8 个字符?

标签: c++string

解决方案


其构造函数std::string接受一个指向的指针,char要求指向的字符串以空值结尾。你str的不是空终止的,所以程序的行为是未定义的。

你可以

  • 使用 achar[9]并将最后一个字符设置为'\0'。这仅适用于str不包含任何零字节的情况,因为第一个字节将是终止符。
  • 或者使用std::string(char *s, std::size_t count)没有这种要求的构造函数。

推荐阅读