[Cpp] stringbuffer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig een tooltje te schrijfen dat: een bestand inleest. De buffer naar een string kopieert en weer naar een nieuwe buffer. Nu werkt het onderstaande stukje code prima van txt naar txt toe. Zonder de 2e buffer werkt het ook van .exe naar .exe toe. Maar het werkt niet als je van .exe naar .txt gaat. Alleen ik snap niet waarom. Ik krijg geen errors qua bufferoverflow o.i.d. en de test.txt outputfile blijft geheel leeg. Wat zie ik over het hoofd?

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <fstream>
#include <iomanip>
#include<string.h>
using namespace std; 

int main () 
{
  char * buffer;
  char * buffer2;
  long size;

  ifstream infile ("test.exe",ifstream::binary);
  ofstream outfile ("new.txt",ofstream::binary);

  // get size of file
  infile.seekg(0,ifstream::end);
  size=infile.tellg();
  infile.seekg(0);

  // allocate memory for file content
  buffer = new char [size];

  // read content of infile
  infile.read (buffer,size);
string str = buffer;

buffer2 = new char[str.length() + 1];
strcpy(buffer2, str.c_str());


//buffer2 = str.GetBuffer();
cout << str;

 system("pause" );
  // write to outfile
  outfile.write (buffer2,size);

  // release dynamically-allocated memory
  delete[] buffer;

  outfile.close();
  infile.close();
 
}  

[ Voor 0% gewijzigd door RobIII op 03-03-2010 22:45 . Reden: Syntax highlighting FTW \0/ ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
strcpy kopieert tot het eerste null character, de gemiddelde .exe zit daar vol mee. Om binaire bestanden te kopiëren zul je een andere methode moeten gebruiken/schrijven.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Ja, da's vrij triviaal: outfile << infile.rdbuf(). Werkt met alle soorten files, en dan hoef je zelf niet met buffers te klieren.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

zoals al eerder gezegd, strcpy stopt bij het eerste 0 karakter.
je kan memcpy gebruiken, die kopieert een vast aantal bytes (dat je meegeeft als argument), dan hoef je een stuk minder cope te veranderen :)

-niks-