Hmmm, I don't see how that would solve the memory problem.
Well, then you should really do some research (or even just some thinking). How does strlen() know how long the string is? It expects that what will be passed to it will be a NULL terminated array of chars. You are not passing it a NULL terminated array of chars, but it doesn't know that. So, it goes looking for the NULL. It is not in the bounds of your array, but strlen() doesn't know that. Wherever it finds a NULL, in some other variable or array defines the length of your array. So, your code then initializes much more than just your array. That is a memory problem.
#include <SD.h>
The SD library needs a 512 byte buffer. On other than a Mega, that's 1/4 of the memory available.
char readByte, tempByte, addByte[13], tagString[13], mastertag[13] = {
'4', 'E', '0', '0', '0', '4', '3', 'D', '3', '8', '4', 'F' };
The mastertag array is not NULL terminated, either.
You could easily use strcmp(), instead of writing your own functions, if you simply used strings rather than char arrays.