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.

Original source