|
|
View previous topic :: View next topic |
Author |
Message |
julien lochen
Joined: 16 May 2008 Posts: 14
|
string in parameter |
Posted: Fri Jun 27, 2008 7:06 am |
|
|
Hello,
in display_word() definition what must be in parameter instead of ???
////////
void display_word( ??? ) {}
void main (void)
{
display("hello")
}
thanks, julien |
|
|
Ttelmah Guest
|
|
Posted: Fri Jun 27, 2008 9:01 am |
|
|
This is more complex than it sounds!...
In C, all 'string' implies, is a single dimensional array of characters, terminated with a '\0'.
Some other languages have 'strings' as a full type.
Now, if you have such an array, and want to pass it to a function, then normally, all you would do, is pass the _address_ of the array (so you don't end up moving large amounts of data unnecessarily. So, since in C, the 'name' of an array, is 'shorthand' for the address, you would use:
Code: |
char array[20];
function(array);
//then the array would have it's definition as:
void function(char array[]) {
//or
void function(char * array) {
|
In 'C', array definitions, and pointers are interchangeable.
Now, the problem here is what you show in your original example. You show a _constant_ string. Now on the older PICs, it was basically impossible to access the program memory directly, so you can't construct 'pointers', to a constant array. So, what you show, can't directly be done!...
Two routes round.
First, if you make a copy of the data, into RAM, this can then be used. Strcpy, allows this to be done. So:
Code: |
char array[20];
strcpy(array,"hello")
function(array);
|
On newer compilers, and chips, you can do this automatically. 'PASS_STRINGS_IN_RAM', tells the compiler to do this. You can also use the 'ROM' directive, to take advantage of the ability of the newer flash chips to directly read their ROM areas, and the compiler wll then generate a pointer to the constant array.
Secondly, on the older chips and compilers, there was a 'work around' present. If you declared the code as:
Code: |
void function(int8 character) {
}
//Then called this with:
function("hello");
|
The compiler calls the function (which expects a _single_ character), once for each character in the constant string.
This is efficient, but means you can't then perform 'string' operations on the data.
The best route, depends what you actually want to do, and the compiler version you have.
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|