gpt4 book ai didi

c++ - vector 和 printf 问题

转载 作者:太空狗 更新时间:2023-10-29 23:28:48 28 4
gpt4 key购买 nike

#include <vector>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, const char *argv[])
{
vector<bool> a;
a.push_back(false);
int t=a[0];
printf("%d %d\n",a[0],t);
return 0;
}

此代码给出输出“5511088 1”。我以为会是“0 0”。

谁知道这是为什么?

最佳答案

%d格式说明符用于整数大小的参数,因此 printf函数期望两个参数都是 int 的大小.但是,您为其提供了一个不是 int 的参数。 ,而是 vector<bool> 返回的特殊对象可转换为 bool .

这基本上导致了 printf函数将堆栈中的随机字节视为值的一部分,而实际上它们不是。

解决方案是将第一个参数转换为 int :

printf("%d %d\n", static_cast<int>(a[0]), t);

更好的解决方案是优先使用流而不是 printf如果可能的话,因为不像printf它们是类型安全的,这使得这种情况不可能发生:

cout << a[0] << " " << t << endl;

如果您正在为 printf 寻找类型安全的替代方案-like 格式,考虑使用 Boost Format图书馆。

关于c++ - vector<bool> 和 printf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193460/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com