c++ - 如何将数组和输出转移到ofstream write?

标签 c++ linux windows visual-studio

我想要从读取文件和写入输出中移动字符数组。但我有两个错误。我不知道这个错误。

  1. no suitable conversion function from "std::valarray" to "const char *" exists

  2. 'std::basic_ostream> &std::basic_ostream>::write(const _Elem *,std::streamsize)': cannot convert argument 1 from 'std::valarray' to 'const _Elem *'

void CaesarCipher(std::wstring i_inputFilePath, std::wstring o_outputFilePath, int shift)
{
    ifstream file(i_inputFilePath, ios::binary);
    if (file.is_open())
    {
        ofstream output(o_outputFilePath, ios::binary);
        std::array<char, 1024> buffer;
        while (!file.eof()) {
            file.read(buffer.data(), buffer.size());
            std::rotate(buffer.begin(), std::next(buffer.begin(), shift), buffer.end());
            output.write(buffer, buffer.size());
        }
        output.close();
        file.close();
    }
    else
    {
        cout << "File is not exist";
    }

}

int main()
{

    CaesarCipher(L"D:/input.exe", L"D:/output.exe", 1);
}

最佳答案

你的问题在于

output.write(dataShiftLeft, sizeof(data));

std::ostream::write需要 const char*并且您提供 valarray<char> ,这就是编译器提示的原因。

您需要迭代 valarray并将元素一一写入:

for (auto c : dataShiftLeft) output << c;

但我相信使用 std::array 会更好。和 std::rotate算法,沿着这些思路:

std::array<char, 1024> buffer;
// ...
file.read(buffer.data(), buffer.size());
auto trailing_zeros = std::rotate(buffer.begin(), std::next(buffer.begin(), 1), buffer.end()); // or 
std::fill(trailing_zeros, buffer.end(), 0);

关于c++ - 如何将数组和输出转移到ofstream write?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396779/

相关文章:

c++ - 代码问题将字符串转换为图表excel

c++ - 基类模板实例化取决于派生类构造函数参数类型

linux - 如何在没有密码的情况下使用命令 "sudo adduser test"?

c++ - unique_ptr 编译错误

c# - 是否可以将视频流伪造为在 Skype、Lync 等中可见的虚拟摄像头?

java - 用于 fovy 和 aspect 透视的 OpenGL 投影矩阵

linux - 使用 awk 或 sed 替换 _ 之前的字符串

php - 无法执行 exec 命令 (php/windows/ffmpeg)

C++ 如何检测 Windows 10

python - 如何在 Windows 上使用 Python 更改文件夹图标?