• Welcome to Valhalla Legends Archive.
 

Strange problem.

Started by Noodlez, March 27, 2004, 01:22 AM

Previous topic - Next topic

Noodlez


int loadfile(char path[255], char *data){
   FILE *pFile;
   char *buffer;
   int lSize;
   pFile = fopen(path,"rt");
   if(pFile!=NULL){
       fseek(pFile, 0, SEEK_END); /
       lSize = ftell(pFile);
       rewind(pFile);
       
       data = new char[lSize];
       if (data==NULL) return 2;
       fread(data,1,lSize,pFile);
       fclose(pFile);
       return 0;
   }
   return 1;
}


Best way to explain the problem:


char *strBuffer;
char strPath[255];
if(loadfile(strPath, strBuffer)){
   printf("File contents: %s\n",strBuffer);
}


When loadfile function is called, and I output the buffer within the function, the contents of the file are outputted. However, after calling the function, NULL will be displayed. This has had me stumped for 2 days, but I just don't see whats wrong.

Note: The example code is not the code used in my program, however they both do the exact same thing, so it shouldn't matter.

Skywing

strBuffer will be pointing to uninitialized data.  I think you meant to pass a char** instead of a char* judging from your code.

Moonshine

#2
Yes, you'll need a reference to a pointer, or a pointer to a pointer like skywing said.  Or you could always initialize a buffer before the function call (which would require you to have a seperate GetFileSize() type function).

The easiest way to fix this is just change

int loadfile(char path[255], char *data); // Can't pass a pointer to a pointer using one *

to

int loadfile(char path[255], char *&data); // Use a reference to a pointer for easiness' sake (vs. pointer to a pointer)


Also note that you'll need to add a null terminator on the end of that buffer if you're dealing with strings (IIRC).

Noodlez

Awsome. Thanks Moon & Sky, it works now.