ofstream doesn't write buffer to file

前端 未结 5 1345
耶瑟儿~
耶瑟儿~ 2021-01-24 06:56

I\'m trying to write the contents of buf pointer to the file created by ofstream.

For some reason the file is empty, however the contents of buf is never empty... What

5条回答
  •  温柔的废话
    2021-01-24 07:09

    Many problems can be solved by getting rid of the hairy stuff, like manual allocation management.

    Never use new T[N] in your code: instead use std::vector v(N);. Simply this alone might solve your problem, because the pointer stuff isn't in the way:

    void DLog::Log(const char *fmt, ...)
    {
        va_list varptr;
        va_start(varptr, fmt);
    
        int n = ::_vscprintf(fmt, varptr);
        std::vector buf(n + 1);
    
        ::vsprintf(&buf[0], fmt, varptr);
    
        va_end(varptr);
    
        if (!m_filename.empty())
        {
            std::ofstream ofstr(m_filename.c_str(), ios::out);
            if (!ofstr) 
            {
                // didn't open, do some error reporting here
            }
    
            // copy each character to the stream
            std::copy(buf.begin(), buf.end(), std::ostream_iterator(ofstr));
    
            // no need to close, it's done automatically
        }
    
        // no need to remember to delete
    }
    

    Much easier to read and maintain. Note even better would be a std::string buf(n + 1);, then you could just do ofstr << buf;. Sadly, std::string isn't currently required to store its elements contiguously, like std::vector. This means the line with &buf[0] isn't guaranteed to work. That said, I doubt you'll find an implementation where it wouldn't work. Still, it's arguably better to maintain guaranteed behavior.

    I do suspect the issue was you dereferencing the pointer, though.

提交回复
热议问题