title: zlib c++ char size of buffer for compression
body: <p>I'm using this function for zlib compression and wondering whether the outbuffer variable should be set to a specific size? Is it limiting the char array to whatever I put in here? Is there a limit to the length I can put in here? Would it make sense to just convert it to std::string, since Im compiling in c++?</p>
  
  <pre><code> /** Compress a STL string using zlib with given compression level and return
       * the binary data. */
      std::string compress_string(const std::string&amp; str, int compressionlevel = 9)
      {
          z_stream zs;                        // z_stream is zlib's control structure
          memset(&amp;zs, 0, sizeof(zs));
  
          if (deflateInit(&amp;zs, compressionlevel) != Z_OK)
              throw(std::runtime_error("deflateInit failed while compressing."));
  
          // For the compress
          deflateInit2(&amp;zs, compressionlevel, Z_DEFLATED,MOD_GZIP_ZLIB_WINDOWSIZE + 16,MOD_GZIP_ZLIB_CFACTOR,Z_DEFAULT_STRATEGY) != Z_OK;
  
          zs.next_in = (Bytef*)str.data();
          zs.avail_in = str.size();           // set the z_stream's input
  
          int ret;
          char outbuffer[3222768];
          std::string outstring;
  
          // retrieve the compressed bytes blockwise
          do {
              zs.next_out = reinterpret_cast&lt;Bytef*&gt;(outbuffer);
              zs.avail_out = sizeof(outbuffer);
  
              ret = deflate(&amp;zs, Z_FINISH);
  
              if (outstring.size() &lt; zs.total_out) {
                  // append the block to the output string
                  outstring.append(outbuffer,zs.total_out - outstring.size());
              }
          }
          while (ret == Z_OK);
  
          deflateEnd(&amp;zs);
  
          if (ret != Z_STREAM_END) {          // an error occurred that was not EOF
              std::ostringstream oss;
              oss &lt;&lt; "Exception during zlib compression: (" &lt;&lt; ret &lt;&lt; ") " &lt;&lt; zs.msg;
              throw(std::runtime_error(oss.str()));
          }
  
          return outstring;
      }
  </code></pre>