【发布时间】:2018-10-08 14:54:14
【问题描述】:
我有一个函数返回一个字节的二进制表示:
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 个字符?
【问题讨论】:
-
return std::string(str, 8);参见 (4) in: en.cppreference.com/w/cpp/string/basic_string/basic_string 不需要 NULL 终止并允许嵌入 NULL。 -
str不是空终止的,所以你有 UB -
Silly mistake: forgot about null terminator这是一个答案吗?如果是这样,请不要将其放入您的问题。相反,如果您对答案感到满意,请对一些说明错误并接受它的答案进行投票。