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,"we eee");
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
ta*******@rocke tmail.com