矢量弄乱 std::cout?
vector messing with std::cout?
我正在尝试为将磁盘的一部分复制到另一个磁盘制作进度条。我正在使用进度条 class 处理打印我在堆栈交换 (https://codereview.stackexchange.com/questions/186535/progress-bar-in-c) 中找到的进度条,我对其进行了稍微修改以允许更精确(显示小数点)。
然而,为了复制文件,我使用了矢量,如果我将进度条对象的声明放在我的矢量声明之后,我将显示矢量的部分内容,而不是进度条。
这是一个不起作用的代码示例:
vector<char> buff(512);
progress_bar progress{std::cout, 70u, "Formating"};
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
如果我这样做:
progress_bar progress{std::cout, 70u, "Formating"};
vector<char> buff(512);
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
一切正常。
知道为什么或如何避免吗?
read(fd,&buff[0],512*i);
当 i > 0 时缓冲区溢出。
我正在尝试为将磁盘的一部分复制到另一个磁盘制作进度条。我正在使用进度条 class 处理打印我在堆栈交换 (https://codereview.stackexchange.com/questions/186535/progress-bar-in-c) 中找到的进度条,我对其进行了稍微修改以允许更精确(显示小数点)。
然而,为了复制文件,我使用了矢量,如果我将进度条对象的声明放在我的矢量声明之后,我将显示矢量的部分内容,而不是进度条。
这是一个不起作用的代码示例:
vector<char> buff(512);
progress_bar progress{std::cout, 70u, "Formating"};
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
如果我这样做:
progress_bar progress{std::cout, 70u, "Formating"};
vector<char> buff(512);
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
一切正常。
知道为什么或如何避免吗?
read(fd,&buff[0],512*i);
当 i > 0 时缓冲区溢出。