On 12/06/2008, at 7:35 AM, Lim Hock-Chai wrote:
can somebody help me understand how char * work?
It's just a pointer to one or more characters.
char * s1;
pointer (named s1) to char (probably) initialised to NULL.
s1 = "assign a value";
s1 contains address of null-terminated string "assign a value".
s1 = "assign another value";
s1 now contains address of null terminated string "assign another  
value".
//does c auto deallocate storage and
reallocate a longer one for this assignment?
No because both strings are literal constants. The compiler makes  
space for both constants and they remain in existence for the life of  
the program. However, unless you stored the first address of s1  
before assigning the second address you have lost addressability to  
the first string.
 . .
char * s1
Again, a pointer (named s1) to char (probably) initialised to NULL.
int myInt = 10;
An integer (4-bytes) initialised to the value 10
sprintf(s1, "test %i", myInt);
Convert the value in myInt to character representation and  
concatenate to the string "test " and copy the new string to the  
buffer addressed by s1.
//why is s1 contains *null after this assignment?
Because s1 is NULL on the call to sprintf(). There is no buffer  
addressed by s1 so it remains NULL. That is, sprintf() does nothing.
You have to either define s1 to point to a sufficiently large buffer
char s1[100];
or dynamically allocate sufficient storage and set s1 to point to it.
char * s1;
s1 = malloc(100);
Note that sprintf() presumes sufficient space is available and will  
quite happily walk off the end of any supplied space. snprintf() is a  
safer choice.
If only C understood fixed-length or varying character data life  
would be so much easier. Why use a compiler that does so little for you?
Regards,
Simon Coulter.
--------------------------------------------------------------------
   FlyByNight Software         OS/400, i5/OS Technical Specialists
   
http://www.flybynight.com.au/
   Phone: +61 2 6657 8251   Mobile: +61 0411 091 400        /"\
   Fax:   +61 2 6657 8251                                   \ /
                                                             X
                 ASCII Ribbon campaign against HTML E-Mail  / \
--------------------------------------------------------------------
 
As an Amazon Associate we earn from qualifying purchases.