Как объяснили посты других, строки в C заканчиваются нулем. (Обратите внимание, что C ++, однако, уже предоставляет строковый тип, который не зависит от этого.)
Ваш случай немного отличается, потому что вы получаете строку с двойным нулем в конце. Я здесь не эксперт, поэтому любой может смело поправлять меня, если я ошибаюсь. Но это похоже на типичное строковое представление для приложений, поддерживающих юникод / i18n в Windows, которые используют широкие символы. Пожалуйста, посмотрите на этот .
Можно предположить, что приложение, сохраняющее строку в базе данных, не использует «переносимую» стратегию. Например, он может сохранять строковый буфер, учитывая его размер в необработанных байтах вместо его фактической длины . Первый будет считать дополнительные два нуля в конце (и, следовательно, сохранит их тоже), а второй отбросит их.