向量弄乱了std :: cout吗?

时间:2019-04-16 08:38:26

标签: c++ string vector stack cout

我正在尝试为将磁盘的一部分复制到另一部分制作一个进度条。我正在使用一个进度条类,该类用于打印我在堆栈交换(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);
    }
}

一切正常。

任何想法为何或如何避免它?

1 个答案:

答案 0 :(得分:3)

read(fd,&buff[0],512*i);

当i> 0时缓冲区溢出。