Char array comparison in C
arrays, c, char, mplab-c18
Solution
Hmm...
Sometimes in embedded systems there is difference where strings are stored.
In the first example you define a string which is stored in flash code region only. So the comparison will fail with index 0 because of the memory area difference.
The second example you define a local variable which contain the same string. This will be located in RAM, so the comparison works since they are both in RAM.
I would test following:
char buffer[5]; //which is filled correctly later
char word[5] = "WORD";
...
test(buffer, word, 5);
Most likely it is going to work because the comparison is done in RAM totally.
Yes and remove the \0 since the "WORD" will null terminate automatically.
Problem
I have following function to compare two char arrays in C: ``` short test(char buffer[], char word[], int length) { int i; for(i = 0; i < length; i++) { if(buffer[i] != word[i]) { return 0; } } return 1; } ``` And somewhere in main: ``` char buffer[5]; //which is filled correctly later ... test(buffer, "WORD", 5); ``` It returns 0 immediately at i = 0. If I change function to this: ``` short test(char buffer[], int length) { int i; char word[5] = "WORD"; for(i = 0; i < length; i++) { if(buffer[i] != word[i]) { return 0; } } return 1; } ``` ... it works like a charm. In the first version of function test debugger says that buffer and word arrays are type of char*. In the second version of function test it says that the buffer is type of char* and the test array is type of char[]. Function strcmp() does not work neither. What is actually wrong here? Program is made for PIC microcontroller, compiler is C18 and IDE is MPLAB.