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.
bufferis filled in correctly but I'm skeptical. Also, in the second example you declarewordas an array of 5 chars and then initialize it with 6 chars. I don't know what your compiler does with that but it's not how you should do it. You don't need to add\0to a literal string in C unless that string requires double null termination.