Shoutbox

C++ help - Printable Version

-Shoutbox (https://shoutbox.menthix.net)
+-- Forum: MsgHelp Archive (/forumdisplay.php?fid=58)
+--- Forum: Skype & Technology (/forumdisplay.php?fid=9)
+---- Forum: Tech Talk (/forumdisplay.php?fid=17)
+----- Thread: C++ help (/showthread.php?tid=37460)

C++ help by Millenium_edition on 01-25-2005 at 01:55 PM

Yesterday I realized my MSN servers app was widely used... So I decided to make a new version, with new features and stuff. But i wanted to do it in c++.

My problem: i get a bug, and I don't understand why :dodgy:

I wrote this piece of code to try to get the number of servers.

code:
#include <windows.h>
#include <fstream.h>

int GetEntries(char* buffer, long int size);

int main(int argc, char* argv[])
{
    fstream servers("msnservers.dat",ios::in | ios::binary | ios::ate);
    long int fileSize;
    fileSize = servers.tellg();
    char* fileBuffer;
    fileBuffer = new char[fileSize];
    servers.seekg(0);
    servers.read(fileBuffer,fileSize);
    servers.close();
    int entries=GetEntries(fileBuffer,fileSize);
    MessageBox(0,reinterpret_cast<const char*>(entries),'\0',0);
    delete[] fileBuffer;
    return 0;
}

int GetEntries(char* buffer, long int Size) {
    char tempchar;
    int temp = 0;
    for(int i = 0; i < Size; i++) {
        tempchar=buffer[i];
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);
    }
    return temp;
}


it gives me the ugly XP crash box. (I'm using ms vc++ 6 as a compiler, and I'm happy with it.)

Now, could someone please tell me what's wrong? :)
RE: C++ help by Concord Dawn on 01-25-2005 at 01:59 PM

quote:
Originally posted by Millenium_edition
Yesterday I realized my MSN servers app was widely used... So I decided to make a new version, with new features and stuff. But i wanted to do it in c++.

My problem: i get a bug, and I don't understand why :dodgy:

I wrote this piece of code to try to get the number of servers.
code:
#include <windows.h>
#include <fstream.h>

int GetEntries(char* buffer, long int size);

int main(int argc, char* argv[])
{
    fstream servers("msnservers.dat",ios::in | ios::binary | ios::ate);
    long int fileSize;
    fileSize = servers.tellg();
    char* fileBuffer;
    fileBuffer = new char[fileSize];
    servers.seekg(0);
    servers.read(fileBuffer,fileSize);
    servers.close();
    int entries=GetEntries(fileBuffer,fileSize);
    MessageBox(0,reinterpret_cast<const char*>(entries),'\0',0);
    delete[] fileBuffer;
    return 0;
}

int GetEntries(char* buffer, long int Size) {
    char tempchar;
    int temp = 0;
    for(int i = 0; i < Size; i++) {
        tempchar=buffer[i];
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);
    }
    return temp;
}


it gives me the ugly XP crash box. (I'm using ms vc++ 6 as a compiler, and I'm happy with it.)

Now, could someone please tell me what's wrong? :)

The compiler? I = total n00b in C++, but have you tried using a different compiler? I was doing a VB program in school once and I had to use a different compiler because VBStudio didn't work. Had to eventually get it reinstalled.
RE: RE: C++ help by Millenium_edition on 01-25-2005 at 02:09 PM

tried the GNU c++ compiler, didn't work either.



nmv, found the bug. stupid messagebox call. >.<


RE: C++ help by RaceProUK on 01-26-2005 at 09:38 AM

quote:
Originally posted by Millenium_edition
code:
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);

I'm surprised that compiled, sort of. Passing a char when you need a char* should be picked up by the compiler.
RE: C++ help by segosa on 01-26-2005 at 06:35 PM

code:
char tmp[2];
tmp[0]=tempchar;
tmp[1]='\0';
MessageBox(NULL,tmp,NULL,NULL);

RE: C++ help by TheBlasphemer on 01-26-2005 at 06:59 PM

quote:
Originally posted by raceprouk
quote:
Originally posted by Millenium_edition
code:
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);

I'm surprised that compiled, sort of. Passing a char when you need a char* should be picked up by the compiler.


not if you tell it explicitly to reinterpret cast :P
RE: RE: C++ help by Millenium_edition on 01-26-2005 at 07:39 PM

quote:
Originally posted by TheBlasphemer
quote:
Originally posted by raceprouk
quote:
Originally posted by Millenium_edition
code:
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);

I'm surprised that compiled, sort of. Passing a char when you need a char* should be picked up by the compiler.


not if you tell it explicitly to reinterpret cast :P

I did that because it gave me an error if I didn't, but that's probably my fault :(

i realized that afterwards. but I'm a c++ noob atm :p

(thanks to everyone :) )
RE: C++ help by RaceProUK on 01-26-2005 at 09:06 PM

quote:
Originally posted by TheBlasphemer
quote:
Originally posted by raceprouk
quote:
Originally posted by Millenium_edition
code:
        MessageBox((HWND)0,reinterpret_cast<const char*>(tempchar),'\0',0);

I'm surprised that compiled, sort of. Passing a char when you need a char* should be picked up by the compiler.
not if you tell it explicitly to reinterpret cast :P
Wasn't looking at the cast: i was looking at the caption argument.
RE: C++ help by zaidgs on 01-28-2005 at 02:50 AM

being a noob (i am an intermediate-level c++ programmer [or whtevr, i cannot find the correct expression, excuse my poor english :S]) i suggest u keep away from reinterpret_cast as fire!!
use static_cast, or dynamic_cast instead