Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

BlueDev

Reading one byte at a time...

This topic is 5431 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello, I am trying to read one byte at a time and then write that one byte to a string, then the next byte and append that to the string. My first string is called '*buffer' and second '*buffTemp'. I want buffTemp to read each of buffers bytes and copy them to buffTemp. I cannot do it by just string copying because something has happened to buffer which only wrote two bytes but if I do a loop of displaying the bytes I see all 1500. I dont know why. So I have goten this far:
unsigned int j;
for( j = 0; j < 1500; j++ ) {
	memcpy(buffTemp, &buffer[j], bytesRead);
	memset(buffTemp, buffer[j], 1);
}
edit: bytesRead is a unsigned int and equals 1500 Now this successfully works a little bit and sets buffTemp to the last byte in my buffer. Thats good and all but I want to write all the bytes not just the last one, how would I accomplish this? Thanks for your time. - BlueDev
BlueDev Net [edited by - BlueDev on September 3, 2003 12:28:46 PM]
Advertisement
memcpy( buffTemp, buffer, 1500 );

or

for( size_t i = 0; i < 1500; ++i )
{
buffTemp[‍i] = buffer[‍i];
}



[ Start Here ! | How To Ask Smart Questions | Recommended C++ Books | C++ FAQ Lite | Function Ptrs | CppTips Archive ]
[ Header Files | File Format Docs | LNK2001 | C++ STL Doc | STLPort | Free C++ IDE | Boost C++ Lib | MSVC6 Lib Fixes ]


[edited by - Fruny on September 3, 2003 12:35:41 PM]

Share this post


Link to post
Share on other sites
It would depend on the source data, but it seems like you''re just trying to copy a string but the buffer isn''t null terminated. Can you either memset the whole buffer to 0 before populating it or after populating it, set the next byte to 0.

Share this post


Link to post
Share on other sites
Ok,

Fruny, the first thing I tried was:

memcpy( buffTemp, buffer, 1500 );

Now whats wrong with that is that for some reason my buffer only thinks its two bytes large until I display it in a loop then all the bytes show up. Then when I tried the second loop and displayed buffTemp once again I only saw two bytes worth of data. I dont know why this is happening but if I ever use 'cout <<' and display one byte at a time it all shows up but I just cant read it write. It may also be the way my char is setup, I dont really know but Ill post my code below:


#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

void main() {
FILE *file;
char *buffer, *buffTemp;
unsigned int bytesRead, lSize, MAXSIZE = 1500;

file=fopen("C:\\test.txt", "rb");
if(file != NULL) {
fseek(file, 0, SEEK_END);
lSize=ftell(file);
rewind(file);

buffer = (char*) malloc (MAXSIZE + 1);
if (buffer == NULL) exit (2);

bytesRead = fread(buffer,1,MAXSIZE,file);
buffer[bytesRead] = '\0';

buffTemp = (char*) malloc (MAXSIZE + 1);

unsigned int j;
for( j = 1; j < MAXSIZE; ++j ) {
cout << buffer[j];
memcpy( buffTemp, &buffer[j], bytesRead ); // bytesRead = 1500

memset( buffTemp,buffer[j],1 );
}
cout << endl;

fclose(file);
free(buffer);
free(buffTemp);
}
}


Now for some reason that memcpy and memset only wrote buffTemp the last byte of buffer, which I know thats good in some way cause I can actually write the bytes, now I want to be able to do this with all bytes, how would I?

- BlueDev

[edited by - BlueDev on September 3, 2003 1:05:44 PM]

Share this post


Link to post
Share on other sites
I built this with VS.NET 2003 and it worked fine for me. The code is:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

void main()
{
FILE *file;
char *buffer, *buffTemp;
unsigned int bytesRead, MAXSIZE = 1500;
file=fopen("C:\\test.txt", "rb");
if(file != NULL)
{
buffer = (char*) malloc (MAXSIZE + 1);
if (buffer == NULL)
exit (2);
bytesRead = fread(buffer,1,MAXSIZE,file);
buffer[bytesRead] = '\0';
cout << buffer << endl;
fclose(file);
free(buffer);
}
}


The text file I used was:


Hello World

How is it going?


[edited by - jonstelly on September 3, 2003 2:18:37 PM]

Share this post


Link to post
Share on other sites
Strings are not just sequences of characters. A string is sequence of characters with a null terminator. When you write the loop to display the string within the buffer you need to check for a null terminator character which is '\0' as a character, or ascii code zero.

ie-


void PrintString( char* cp )
{
int i = 0;
while( cp[i] != '\0' )
printf("%c", cp[i++]);
}


[edited by - haro on September 3, 2003 3:26:39 PM]

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!