Это действительно зависит от того, что пишет строка.
Как правило, строки заканчиваются NUL, то есть символ '\0'
следует сразу за строкой.Старый стиль (не _s
-вариант) Функции C, такие как strlen
и strcat
, используют это для определения конца существующих строк и отметки конца измененных строк.
Большинство строковых типов данных, как правило, работают таким образом, но не все.В Turbo Pascal строки имеют префикс длины.BSTR
, используемые в COM (включая pre-.NET VB), оба.
На основании примеров, которые вы показали, есть большая вероятность, что символ ?
, который вы видите после частиВы хотите, это NUL персонаж.Похоже, что буфер используется повторно и повторно завершается каждый раз, например, более короткая строка, такая как «Ax», была записана поверх более длинной строки, как определенный вид окарины.
Проверьте буфер в отладчике, и выВероятно, вы найдете символ '\0'
, следующий сразу за тем, что вам нужно.
Вероятно. Опять же, это зависит от того, что пишет строка.Пока вы не посмотрите на себя, это может быть что угодно, и даже тогда, это может быть просто совпадением, что это NUL-завершенный на этот раз .Не полагайтесь только на наблюдение.Без документации это могло бы быть иначе и все еще столь же верно. Что бы вы ни делали , не читайте за 40-символьным буфером, который, как вы знаете, у вас , NUL завершен или нет.