Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добавил в тест StringLen, и инициализировал строку по другому. В документации одно, по факту совсем другое поведение.
И буфер в этом случае показывает 0 а не 260.
В документации указано, когда возвращается 0 и он подходит для указанного случая
В документации указано, когда возвращается 0 и он подходит для указанного случая
Документация вообще не соответствует текущему поведению!
А результаты разные ))В чём разница двух видов инициализации?
И вообще не понятно откуда лезет левое число 260.
Документация вообще не соответствует текущему поведению!
Документация: Значение 0 означает, что строка – константная и содержимое буфера менять нельзя.
Строка инициализирована константой "_" и компилятор считает строку условно (для целей эффективности) константной - почему бы и нет? В чем противоречие? Тем более что далее с ней не происходит никаких операций.
И вообще не понятно откуда лезет левое число 260.
Модератор пояснил откуда, а почему оно в случае
не появляется - повод для проверки
Модератор пояснил откуда
С числом 260 вроде понял, компилятор сам выделяет буферу StringBufferLen начальный размер в 260.
И если длина строки меньше 260, то StringBufferLen выводит именно 260, а не реальную длину строки!
А если длина строки больше 260, тогда выводиться реальное значение строки.
То есть пользуясь функцией StringBufferLen, с длиной строки менее 260 символов, мы не получим реальную длину строки, и будем получать всегда 260.
Видимо в этом и есть ошибка.
Как только срока превысит 260 символов, тогда получаем реальное значение длины.
p.s. так как документация устаревшая это жесть как вводит в заблуждение.
То есть пользуясь функцией StringBufferLen, с длиной строки менее 260 символов, мы не получим реальную длину строки, и будем получать всегда 260.
Видимо в этом и есть ошибка.
Как только срока превысит 260 символов, тогда получаем реальное значение длины.
Строго говоря длина строки: StringLen, а длина буфера: StringBufferLen - довольно редкая функция. И в общем случае они могут и не совпадать
Итого два как минимум сомнительных случая:
Результаты выполнения показывают, что компилятор действует вопреки логике:
Результаты выполнения показывают, что компилятор действует вопреки логике:
Размер преаллокации буферов под строки - это внутреннее дело компилятора.
Мы еще неоднократно будем менять работу со строками.