You forgot the zero terminator:
std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);
sRecord.m_strUsername[strUsername.size()] = '\0';
or alternatively
std::strcpy(sRecord.m_strUsername, strUsername.c_str() );
or if you want all "unused" characters of your array to be \0:
std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);
std::fill(sRecord.m_strUsername + strUsername.size(),
sRecord.m_strUsername + 1064, '\0');
The latter is usually not necessary since C-style strings are commonly defined as a range like [sRecord.m_strUsername[0], first '\0' in the array). What comes after the first \0 usually does not matter unless you want to access that for whatever reason.
The range [str.begin(), str.end()) only contains all the characters of the string. A C-style string (aka array of char) requires an additional '\0'-termination character.
With my first and second proposed fix, the range [sRecord.m_strUsername[0], first '\0' in the array) will be equal to the characters in strUsername as long as the latter does not contain any additional '\0's (something you just cannot easily deal with with C-style strings).
With my third proposed fixed, every character in the array after all the characters from your string will be \0.
Important note: Before doing any of the above, you need to assert that your string contains at most 1063 characters! If this is not certain, raise some kind of error if the assumption does not hold or use std::strncopy instead. strncopy will basically behave like my third snippet, but you have to zero the last element of your array yourself.