Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C > Re: How is it w...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 5 of 5 Topic 26072 of 26821
Post > Topic >>

Re: How is it working? Am I doing it right?

by "Jim Langston" <tazmaster@[EMAIL PROTECTED] > May 5, 2008 at 10:54 PM

Benoit Lefebvre wrote:
> Weird subject you will say.. I didn't know what to put in there..
>
> Long story short, I'm changing the value of a variable from a
> function.. Nothing unusual there..
>
> How come the value of the "word" variable change when using the
> testfunct function?  Am I sending a pointer to the word variable to
> this function or whatever ??
>
> I know it's a weird question.. especially that this is doing exactly
> what I need.. but I want to know if I'm doing it right and if not, how
> to make it work correctly.
>
> The program where this is going is checking a configuration text file
> and puts all the lines in a 2d char array for comparison later. Here
> is a simplified "extraction" of the code.
>
> ------
> #include <stdio.h>
> #include <strings.h>
>
> int testfunct (char *myword)

testfunct takes as a parameter a character pointer.  A pointer to a 
character or array of characters depending on how you use it.

> {
>  strcpy(myword,"hello");

strcpy will copy into the location of the character pointer the contents
of 
the 2nd parameter.

>
>  return 0;
> }
>
> int main (int argc, char *argv[])
> {
>  char word[100];

word is defined as an array of 100 characters.  &word[0] is the address of

the first character, but so is word by itself.  It gets silently
converted.

>
>  strcpy(word,"weeee");

here word is silently converted to a char pointer, the same as &word[0] 
which is where strcpy will start copying the contents of the 2nd
parameter.

>  printf("WORD: %s\n", word);
>  testfunct(word);

here testfunct takes a char pointer so the compiler silently converts word

to a char pointer, the same as &word[0]

>  printf("WORD: %s\n", word);
>
>  return 0;
> }
> ------

It is a well formed program.

Note, however, that you may wish to pass a 2nd parameter to your function,

the size of the buffer.

If you had done:
char word[2];
testfunct(word);

The compiler would accept it and when you ran it you would get a buffer 
overflow because strcpy doesn't know how long the buffer the char pointer
is 
pointing to, it has no way to know.  So it mindlessly copies until it 
reaches the terminating null character in the copy from buffer,
effectively 
trying to stuff 10 pounds of stuff in a 5 pound bag.


-- 
Jim Langston
tazmaster@[EMAIL PROTECTED]

 




 5 Posts in Topic:
How is it working? Am I doing it right?
Benoit Lefebvre <benoi  2008-05-05 08:54:09 
Re: How is it working? Am I doing it right?
roberson@[EMAIL PROTECTED  2008-05-05 16:11:48 
Re: How is it working? Am I doing it right?
Keith Thompson <kst-u@  2008-05-05 09:39:15 
Re: How is it working? Am I doing it right?
Keith Thompson <kst-u@  2008-05-05 09:37:46 
Re: How is it working? Am I doing it right?
"Jim Langston"   2008-05-05 22:54:32 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Jul 9 0:54:19 CDT 2008.