mardi 23 août 2016

Why my buffer is not showing the exact data what I want?

#include<iostream>
#include<string>
#include "inStream"
using namespace std;
int main ()
{
system("chcp 1252");
system("cls");
int x=10;
inStream inStr;
inStr<<x;
inStr << 25;
inStr << 'A';
inStr << "hello";
inStr << 2.8;
for (int i=0;i<20;i++)
{
cout << static_cast<char> (inStr.buffer_data[i]); // buffer_data is public 
return 0;
}

Here is my Stream Buffer Class:

// Stream buffer class for storing stream data
// streambuffer.h
class buffer
{
public:
size_t buffer_size;
char *buffer_data, *write_ptr, *read_ptr;
public:
buffer()
{

buffer_size = 1024*1024;
buffer_data = new char[buffer_size];
write_ptr = buffer_data;
read_ptr=write_ptr;

} // constructor ends here
void setbufferdata(int variable_data, size_t variable_size)
{

if (write_ptr+(varialbe_size) > write_ptr+(buffer_size) )
throw std::invalid_argument ( "size exceed from buffer size" );

else
{
memcpy(write_ptr,&variable_data,variable_size);
for (int i=0; i<sizeof(variable_data); i++ )
write_ptr++;
} // else ends here
} // setBufferdata ends here
};

Here is my inStream class which inherits buffer class:

// inStream.h
#include "streambuffer.h"
class inStream: public buffer
{
inStream& operator<<(int rhs)
{
buffer::setbufferdata(rhs,sizeof(rhs));
return *this;
}

inStream& operator<<(char rhs)
{
buffer::setbufferdata(rhs,sizeof(rhs));
return *this;
}

inStream& operator<<(char* rhs)
{
buffer::setbufferdata(rhs,sizeof(rhs));
return *this;
}

inStream& operator<<(float rhs)
{
buffer::setbufferdata(rhs,sizeof(rhs));
return *this;
}
}; // class ends here

I am using MSVS 2010 , and when I saw in watch window my data is place there.. But when I try to retrive data it is showing aliens symbols . I want to know why it is happeing to me ? any reason

Aucun commentaire:

Enregistrer un commentaire