There's a very simple explaination for what's going on. A zero length string would not have the required null terminator. Thus, when it later tries to read the zero length string, it keeps reading till it hits a null terminator. Assuming the file/memory/whatever is contiguous, then it will return the contents of the next entry. To quote MSDN's entry on the function you mentioned "cbData must include the size of the terminating null character or characters. " A 1 character sized string would consist of only the null terminator.