c++ - 字符串函数返回奇怪的值
问题描述
我有一个函数返回一个字节的二进制表示:
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 个字符?
解决方案
其构造函数std::string
接受一个指向的指针,char
要求指向的字符串以空值结尾。你str
的不是空终止的,所以程序的行为是未定义的。
你可以
- 使用 a
char[9]
并将最后一个字符设置为'\0'
。这仅适用于str
不包含任何零字节的情况,因为第一个字节将是终止符。 - 或者使用
std::string(char *s, std::size_t count)
没有这种要求的构造函数。
推荐阅读
- amazon-web-services - 通过 AWS CloudFront 从单个 S3 存储桶为 SPA 多租户提供服务
- css - 为什么 Bootstrap 4.5 断点在我的 CSS 中不起作用?
- java - 想知道如何通过单击按钮为我重定向任何特定页面的期限确定期限吗?
- api - 在 webforms 中处理从 api 系统返回的 html 内容
- javascript - 让消息在几秒钟后消失
- adaptive-cards - 自适应卡片 Action.OpenURL 跟踪
- java - 为什么我不能用类对象访问java中的内部静态类
- ffmpeg - fluent-ffmpeg 使用复杂过滤器设置音频电平
- bash - Bash awk,打印并跳过某些行输出到另一个文本文件
- ruby - mongo ruby 潜水员 UUID 格式似乎与 uuid v4 不同?