Ok, including my sample code below.
What I'm ultimately working on:
I need to pass a string to a function, and be able to find the size of the string, and add the characters to a character array. I'm working on an I2C OLED driver... so trying to read in a string from one source, and pass it out to the display driver.
Where I'm stumbling...
If I have a char * mystring then sizeof(mystring) should equal sizeof(pointer).
However, shouldn't sizeof(&mystring) return the size of the contents of the string?
The code below also has a little snippet to make the led's on the header act as a binary out. ;)
Where I'm doing my testing is commented, for your pleasure.
#include "mbed.h"
DigitalOut myled1(LED1);DigitalOut myled2(LED2);DigitalOut myled3(LED3);DigitalOut myled4(LED4);
void report (int number);
int test_1(char * mypointer);
int test_2(char mystring[]);
int test_3(char mystring);
int main() {
char * characterstringpointer = "abcdefghij";
char characterstring[] = "abcdefghij";
while (1) {
// A pointer, I expect 4 (pointer = int = 4 bytes)
report(sizeof(characterstringpointer));
// I get 4.
// Data at pointer, I expect 11 (10 + \0)
report(sizeof(&characterstringpointer));
// I get 4?!
// Returns sizeof data at pointer, I expect 11 (10 + \0)
report(test_1(characterstringpointer));
// I get 4?!
// Returns sizeof raw character array, I expect 11 (10 + \0)
report(sizeof(characterstring));
// I get 11
// Tries to pass the array as an array then get sizeof, I expect 11 (10 + \0)
report(test_2(characterstring));
// I get 4?! -- This one is 'bad' but testing for completeness
// Tries to pass as a 'char', which should act as a string, then get sizeof, I expect 11 (10 + \0)
report(test_2(characterstring));
// I get 4?!
wait(5);
}
}
int test_1(char * mypointer) {
return(sizeof(&mypointer));
}
int test_2(char mystring[]) {
return(sizeof(mystring));
}
int test_3(char mystring) {
return(sizeof(mystring));
}
void report (int number) {
switch (number) {
case 0: myled1 = 0;myled2 = 0;myled3 = 0;myled4 = 0; break;
case 1: myled1 = 0;myled2 = 0;myled3 = 0;myled4 = 1; break;
case 2: myled1 = 0;myled2 = 0;myled3 = 1;myled4 = 0; break;
case 3: myled1 = 0;myled2 = 0;myled3 = 1;myled4 = 1; break;
case 4: myled1 = 0;myled2 = 1;myled3 = 0;myled4 = 0; break;
case 5: myled1 = 0;myled2 = 1;myled3 = 0;myled4 = 1; break;
case 6: myled1 = 0;myled2 = 1;myled3 = 1;myled4 = 0; break;
case 7: myled1 = 0;myled2 = 1;myled3 = 1;myled4 = 1; break;
case 8: myled1 = 1;myled2 = 0;myled3 = 0;myled4 = 0; break;
case 9: myled1 = 1;myled2 = 0;myled3 = 0;myled4 = 1; break;
case 10: myled1 = 1;myled2 = 0;myled3 = 1;myled4 = 0; break;
case 11: myled1 = 1;myled2 = 0;myled3 = 1;myled4 = 1; break;
case 12: myled1 = 1;myled2 = 1;myled3 = 0;myled4 = 0; break;
case 13: myled1 = 1;myled2 = 1;myled3 = 0;myled4 = 1; break;
case 14: myled1 = 1;myled2 = 1;myled3 = 1;myled4 = 0; break;
case 15: myled1 = 1;myled2 = 1;myled3 = 1;myled4 = 1; break;
default: myled1 = 1;myled2 = 1;myled3 = 1;myled4 = 1; break;
}
wait(2.0);myled1 = 0;myled2 = 0;myled3 = 0;myled4 = 0;
wait(0.1);myled1 = 1;myled2 = 1;myled3 = 1;myled4 = 1;
wait(0.1);myled1 = 0;myled2 = 0;myled3 = 0;myled4 = 0;
wait(0.2);
}
Ok, including my sample code below.
What I'm ultimately working on: I need to pass a string to a function, and be able to find the size of the string, and add the characters to a character array. I'm working on an I2C OLED driver... so trying to read in a string from one source, and pass it out to the display driver.
Where I'm stumbling... If I have a char * mystring then sizeof(mystring) should equal sizeof(pointer). However, shouldn't sizeof(&mystring) return the size of the contents of the string?
The code below also has a little snippet to make the led's on the header act as a binary out. ;)
Where I'm doing my testing is commented, for your pleasure.