собственно вопрос не важный но любопытство берет верх.
имеем 2 куска кода:
почему второй не работает а первый работает? почему функции _lread так принципиально чтобы принимающий буфер не был пустым?
Наверно потому, что перед использованием переменной ее нужно инициализировать.
я это и сделал:
string char;
но это не работает, пока не присвоишь переменной любое значение, например:
string char="x";
я это и сделал:
но это не работает, пока не присвоишь переменной любое значение, например:
string char;Тут Вы объявили переменную, а инициализация (фактическое выделение памяти) произошла при записи в нее информации. Можете попробовать перенести и откомпилировать этот код в вижуал студию в приложение на языке С - получите тоже самое.
- www.mql5.com
собственно вопрос не важный но любопытство берет верх.
имеем 2 куска кода:
почему второй не работает а первый работает? почему функции _lread так принципиально чтобы принимающий буфер не был пустым?
Тут может быть два варианта:
1 Вы переопределили зарезервированное под тип char слово как переменную типа string (готовьтесь что компилятор может как то всбыркнуть).
2 Вы определили переменную char но не инициализировали её char=""; тогда в памяти находится непойми что и опять же компилятор может как то не так как вы желаете это обрабатывать.
- www.mql5.com
Кстати, а чего вы ожидаете? Хотите скопировать четыре байта в нулевой буфер? Нехорошо. Позаботиться о размере буфера - ваша задача. И на каком этапе ошибка (при компиляции, или при отладке)? А первый вариант прокатывает, потому что буфер как раз получается четыре байта. И еще, очень любопытно, вы объявили переменную с именем char? Как так....
Тут Вы объявили переменную, а инициализация (фактическое выделение памяти) произошла при записи в нее информации. Можете попробовать перенести и откомпилировать этот код в вижуал студию в приложение на языке С - получите тоже самое.
Тут может быть два варианта:
1 Вы переопределили зарезервированное под тип char слово как переменную типа string (готовьтесь что компилятор может как то всбыркнуть).
2 Вы определили переменную char но не инициализировали её char=""; тогда в памяти находится непойми что и опять же компилятор может как то не так как вы желаете это обрабатывать.
Стало интересно, решил проверить на каком этапе занимается память (инициализация или объявление), написал такого вида код:
int _tmain(int argc, _TCHAR* argv[]) { char k[100]; cin >>k; // Здесь процесс занимает 412 KB double *p; p = new double[20000000]; cin >>k; // Здесь процесс занимает 156900 KB delete p; return 0; }
Мой вывод: память выделяется при объявлении, а не при инициализации. А на счет String - считаю что это класс, следовательно момент выделения памяти под его буфер зависит от конкретной реализации класса String.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
собственно вопрос не важный но любопытство берет верх.
имеем 2 куска кода:
почему второй не работает а первый работает? почему функции _lread так принципиально чтобы принимающий буфер не был пустым?