我有一个函数返回一个字节的二进制表示形式:
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个字符的字符串。显然,函数内部显示正确的值。如何使其返回8个字符?
答案 0 :(得分:5)
std::string
的构造函数接受指向char
的指针,要求指向的字符串以null结尾。您的str
不是以null结尾的,因此程序的行为是不确定的。
您可以
char[9]
并将最后一个字符设置为'\0'
。仅在str
不包含任何零字节的情况下才有效,因为第一个为终止符。std::string(char *s, std::size_t count)
。答案 1 :(得分:3)
引起此问题的原因是您的字符数组不包含终止的空字符。一种解决方案是为数组分配一个额外的字符,以便您可以使用null终止它:
char str[9]
//...
str[8] = '\0'
或者,您可以使用重载的字符串构造函数,该构造函数允许您传入参数以指定要从输入数组使用的字符数:
std :: string(str,8);