In your for() loop, use Serial.println() to display both strings before the compare. You'll be able to see why the compare is failing.
Update:
it seemed identical.
Something has to be different for the test to fail. If the strings look identical then there must be some non-printing characters that differ: \r, \n, , , missing \0 ), etc.
Try printing your buffers byte-by-byte in hex for a few more bytes than the string length, to be sure there is an where it should be.
Or print the buffers with this hexdump function which lists a specified memory range in both ASCII and hex:
/***
Name: hexdump
Function: Dump memory contents to terminal
Description:Dump a specified range of memory in hex and ASCII
Parameters: byte *mem - starting address
uint16_t len - # of bytes
Returns: void
Notes: Based on: http://grapsus.net/blog/post/Hexadecimal-dump-in-C
Formats with sprintf(); outputs with Serial.print().
Modified to print ...0 - ...F of each hex-block containing
any of the requested memory range. Data not in the range are
not shown.
***/
void hexdump(byte *mem, uint16_t len)
{
byte *p, *pfirst, *plast; // -> curr byte, first & last hex-blocks to print from
char buf[10+1]; // sprintf o/p buffer
// Print entire hex-blocks that contain the requested mem range,
// except only show data within the range.
pfirst = (byte *)((uint16_t)mem & 0xFFF0); // beg of 1st hex-block
plast = (byte *)((uint16_t)(mem + len) | 0xF); // end of last hex-block
for( p = pfirst; p <= plast; ++p ){
/* Print block addr */
if( ((byte *)((uint16_t)p & 0xF)) == 0 ){
sprintf_P(buf, PSTR("%06X: "), (unsigned int)p);
Serial.print(buf);
}
// Print hex data, or if outside mem range, print spaces
if( mem <= p && p < (mem + len) ){
sprintf_P(buf, PSTR("%02hhX "), *p);
Serial.print(buf);
}
else
Serial.print(" "); // outside requested range - just spaces
// Maybe print gutters and/or ASCII data
if( ((uint16_t)p & 0xF) == 0x7 )
Serial.print(" "); // narrow gutter after 8 bytes
// If at end of hex block, print a gutter & re-print the block as ASCII
if( ((uint16_t)p & 0xF) == 0xF ){
Serial.print(" "); // wide gutter after 16 bytes
// Print as ASCII.
// Note: In this loop, we re-use the outer loop's index, 'p', to rescan
// the hex block. We must leave 'p' as we found it!
for( p = (byte *)((uint16_t)p & 0xFFF0); ; ++p ){
if( !(mem <= p && p < mem+len) )
Serial.print(' '); // not in requested mem range
else if( !isprint(*p) )
Serial.print('.'); // not printable
else
Serial.print(*(char *)p); // print as ASCII
if( ((uint16_t)p & 0xF) == 0xF ){
break; // end of hex-block
}
}
Serial.print('\n');
}
}
}