empty vector after populating it from file contents
up vote
-2
down vote
favorite
I can't figure out why my code prints out an empty line
I started by echoing hello as hex into a bin file
echo -n -e \x68\x65\x6c\x6c\x6f > myfile.bin
Source code:
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
struct ProcessFile
{
std::vector<uint8_t> fileType;
//Header
int cursor = 0;
ProcessFile(const char *filename);
void readBytes(uint8_t *data, int numBytes);
};
ProcessFile::ProcessFile (const char *filename) {
FILE * fp = fopen(filename, "rb");
fseek(fp, 0, SEEK_END);
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
this->fileType.resize(size);
fread(&fileType[0], 1, size, fp);
fclose(fp);
}
void ProcessFile::readBytes(uint8_t *data, int numBytes) {
memcpy(data, &this->fileType[cursor], numBytes);
this->cursor += numBytes;
}
int main() {
uint8_t data[16];
ProcessFile aFile = ProcessFile("myfile.bin");
aFile.readBytes(data,16);
std::cout << data << std::endl;
}
I would expect the uint8_t data array here to contain hello, the vector is filled with zeros. Why is this happening?
c++ vector fopen binaryfiles
|
show 6 more comments
up vote
-2
down vote
favorite
I can't figure out why my code prints out an empty line
I started by echoing hello as hex into a bin file
echo -n -e \x68\x65\x6c\x6c\x6f > myfile.bin
Source code:
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
struct ProcessFile
{
std::vector<uint8_t> fileType;
//Header
int cursor = 0;
ProcessFile(const char *filename);
void readBytes(uint8_t *data, int numBytes);
};
ProcessFile::ProcessFile (const char *filename) {
FILE * fp = fopen(filename, "rb");
fseek(fp, 0, SEEK_END);
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
this->fileType.resize(size);
fread(&fileType[0], 1, size, fp);
fclose(fp);
}
void ProcessFile::readBytes(uint8_t *data, int numBytes) {
memcpy(data, &this->fileType[cursor], numBytes);
this->cursor += numBytes;
}
int main() {
uint8_t data[16];
ProcessFile aFile = ProcessFile("myfile.bin");
aFile.readBytes(data,16);
std::cout << data << std::endl;
}
I would expect the uint8_t data array here to contain hello, the vector is filled with zeros. Why is this happening?
c++ vector fopen binaryfiles
2
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used likeProcessFile aFile = openFile
.
– VTT
Nov 11 at 8:25
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
1
Also, what is the use offseek(fp, 0, SEEK_END);
twice?...
– Ruks
Nov 11 at 8:38
1
You never check whether file is actually opened, or whether size is not 0, or how many itemsfread
read.
– VTT
Nov 11 at 8:57
|
show 6 more comments
up vote
-2
down vote
favorite
up vote
-2
down vote
favorite
I can't figure out why my code prints out an empty line
I started by echoing hello as hex into a bin file
echo -n -e \x68\x65\x6c\x6c\x6f > myfile.bin
Source code:
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
struct ProcessFile
{
std::vector<uint8_t> fileType;
//Header
int cursor = 0;
ProcessFile(const char *filename);
void readBytes(uint8_t *data, int numBytes);
};
ProcessFile::ProcessFile (const char *filename) {
FILE * fp = fopen(filename, "rb");
fseek(fp, 0, SEEK_END);
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
this->fileType.resize(size);
fread(&fileType[0], 1, size, fp);
fclose(fp);
}
void ProcessFile::readBytes(uint8_t *data, int numBytes) {
memcpy(data, &this->fileType[cursor], numBytes);
this->cursor += numBytes;
}
int main() {
uint8_t data[16];
ProcessFile aFile = ProcessFile("myfile.bin");
aFile.readBytes(data,16);
std::cout << data << std::endl;
}
I would expect the uint8_t data array here to contain hello, the vector is filled with zeros. Why is this happening?
c++ vector fopen binaryfiles
I can't figure out why my code prints out an empty line
I started by echoing hello as hex into a bin file
echo -n -e \x68\x65\x6c\x6c\x6f > myfile.bin
Source code:
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
struct ProcessFile
{
std::vector<uint8_t> fileType;
//Header
int cursor = 0;
ProcessFile(const char *filename);
void readBytes(uint8_t *data, int numBytes);
};
ProcessFile::ProcessFile (const char *filename) {
FILE * fp = fopen(filename, "rb");
fseek(fp, 0, SEEK_END);
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
this->fileType.resize(size);
fread(&fileType[0], 1, size, fp);
fclose(fp);
}
void ProcessFile::readBytes(uint8_t *data, int numBytes) {
memcpy(data, &this->fileType[cursor], numBytes);
this->cursor += numBytes;
}
int main() {
uint8_t data[16];
ProcessFile aFile = ProcessFile("myfile.bin");
aFile.readBytes(data,16);
std::cout << data << std::endl;
}
I would expect the uint8_t data array here to contain hello, the vector is filled with zeros. Why is this happening?
c++ vector fopen binaryfiles
c++ vector fopen binaryfiles
edited Nov 11 at 8:55
asked Nov 11 at 8:24
Bob R
1681516
1681516
2
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used likeProcessFile aFile = openFile
.
– VTT
Nov 11 at 8:25
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
1
Also, what is the use offseek(fp, 0, SEEK_END);
twice?...
– Ruks
Nov 11 at 8:38
1
You never check whether file is actually opened, or whether size is not 0, or how many itemsfread
read.
– VTT
Nov 11 at 8:57
|
show 6 more comments
2
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used likeProcessFile aFile = openFile
.
– VTT
Nov 11 at 8:25
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
1
Also, what is the use offseek(fp, 0, SEEK_END);
twice?...
– Ruks
Nov 11 at 8:38
1
You never check whether file is actually opened, or whether size is not 0, or how many itemsfread
read.
– VTT
Nov 11 at 8:57
2
2
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used like ProcessFile aFile = openFile
.– VTT
Nov 11 at 8:25
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used like ProcessFile aFile = openFile
.– VTT
Nov 11 at 8:25
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
1
1
Also, what is the use of
fseek(fp, 0, SEEK_END);
twice?...– Ruks
Nov 11 at 8:38
Also, what is the use of
fseek(fp, 0, SEEK_END);
twice?...– Ruks
Nov 11 at 8:38
1
1
You never check whether file is actually opened, or whether size is not 0, or how many items
fread
read.– VTT
Nov 11 at 8:57
You never check whether file is actually opened, or whether size is not 0, or how many items
fread
read.– VTT
Nov 11 at 8:57
|
show 6 more comments
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247003%2fempty-vector-after-populating-it-from-file-contents%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
ProcessFile::openFile
is not valid: it is not declared, is missing return type and return statement yet is used likeProcessFile aFile = openFile
.– VTT
Nov 11 at 8:25
Your code doesn't compile.
– πάντα ῥεῖ
Nov 11 at 8:35
@vtt yes that was a typo on my part, the way you saw it, that would not have compiled.
– Bob R
Nov 11 at 8:36
1
Also, what is the use of
fseek(fp, 0, SEEK_END);
twice?...– Ruks
Nov 11 at 8:38
1
You never check whether file is actually opened, or whether size is not 0, or how many items
fread
read.– VTT
Nov 11 at 8:57