On Thu, Jun 10, 2004 at 09:36:04PM -0400, Stephen Touset wrote: > I've opened and read files hundreds of times in my life. What gives now? > > -- > Stephen Touset <stephen@touset.org> > #include <fstream> > > using namespace std; > > int main(void) > { > > ifstream fin("test.cc"); > char* str; > > if (!fin.is_open()) > { > exit(1); > } > > while (!fin.eof()) > { > fin.getline(str, 80); > } > > fin.close(); > > return 0; > > } Hi Stephen, I can understand your confusion. you have a perception issue that is clouding your understanding. either that or you have been looking at this for umteen hours and too much caffine x-). The issue is the understading of memory allocation versus pointer definition. 'char * str' defines a 'char *' called str. it allocates memory for this pointer. so, str has an address of 0xabcd (for example). It has not been initialized with anything, so it contains undeterminate data (eg. garbage). lets say it the contents of address 0xabcd is 'Z'. so, *str = 'Z'. What does *(str + 1) contain? undeterminate data. As does *(str + 2) ... *(str + 79). So you define str, don't initialize it and then read data into *(str) ... *(str + 79). Well not really, becase you have no right to write to those areas. Why? because you have not allocate memory at those addresses. How do you do this? well in c you'd 'malloc. But this is c++, so, you'd use 'new', I think. This should shead some light on you problem. -Kev
Attachment:
signature.asc
Description: Digital signature