Mail Archives: djgpp/1998/08/15/11:15:39
| Message-ID:  | <35D5B384.9FDF797B@sprynet.com>
 | 
| Date:  | Sat, 15 Aug 1998 09:12:52 -0700
 | 
| From:  | Ishpeck <aTedjamulia AT sprynet DOT com>
 | 
| Organization:  | Lunaticnologies
 | 
| MIME-Version:  | 1.0
 | 
| Newsgroups:  | comp.os.msdos.djgpp
 | 
| Subject:  | Re: yet more questions about pointers
 | 
| References:  | <01bdc7e8$c1ff0e20$4ac3b8cd AT scully>
 | 
| NNTP-Posting-Host:  | 192.41.73.95
 | 
| Lines:  | 71
 | 
| To:  | djgpp AT delorie DOT com
 | 
| DJ-Gateway:  | from newsgroup comp.os.msdos.djgpp
 | 
Well, what you're doing, here, is you're saying string1 points to a
section of memory, 80 bytes big.  Then saying, in that memory, you have
the characters   f, o, o, b, a, and r.
When you say "string2 = string1", you're actually saying, now string2
also points to that same memory.  So, if you change your little string
of characters to "faabor", then, both string2 and string1 will print
"faabor" -- as you discovered.  This is because you're changing the
actual data inside your memory -- you're not changing a string.  All
string1 and string2 are are POINTERS to a string IN MEMORY.
It is impossible to say:   string1="foobar"
because then, you're trying to assign a memory pointer a string, and
that's not possible -- unless you make a string class and utilize the
inline operator... but that's C++.  In any case, Strings don't cast to
pointers very well.
And yes, you should always free your memory.  Sometimes, it gets very
messy, and forgeting to free memory is a bad thing.
I usually put the "free()" command before I type anything else -- so I
don't forget.
I hope this answers your questions.
Have a happy day!
Ishpeck
Cephaler wrote:
> 
>   Ok just concluded several tests concerning pointers, now I have some
> questions to verify my results:
> 
> 1) A simple test program:
> int main(void) {
>   char *string1=(char *)malloc(80);
>   char *string2;
> 
>   strcpy(string1,"foobar");
> 
>   string2 = string1;
> 
>   strcpy(string2,"raboof");
> 
>   printf("%s\n",string1);
>   return(0);
> }
> 
> This yielded 'raboof' to my delight... Now, have I found a good use for
> pointers? Or is this bad bad code?
> 
> 2) Having not initialized string2, a) do I have to free string2 and b) does
> that have any effect on string1? (oops didn't free string1)
> 
> 3) concerning strcpy...is there any special reason why I shouldn't just use
> string1 = "foobar" ?
> 
> If the answers to these questions are what I think they are my pointer
> dilemmas are over... (game still crashes though :( )
> 
> - Cephaler -
> 
> p.s. thanks! <-- insert in previous messages as well
-- 
-------------------
See Ishpeck's Programming page!
Example source, Utils, links, 
and help on your programs.
http://members.xoom.com/ishpeck/
- Raw text -