Login
CStdioFile - bad ptr (Visual C++)
NEW 12.05.06 17:25
in Antwort JacksonB 12.05.06 17:21
NEW 12.05.06 17:27
in Antwort voxel3d 12.05.06 17:22
В ответ на:
char * ltoa ( long value, char * buffer, int radix );
Convert long integer value to string.
Converts a long integer value to a null-terminated string using the specified radix and stores the result in the given buffer. If radix is 10 and value is negative the string is preceded by the minus sign (-). With any other radix, value is always considered unsigned. buffer should be large enough to contain any possible value: (sizeof(long)*8+1) for radix=2.
NEW 12.05.06 17:29
in Antwort JacksonB 12.05.06 17:21
Ты бы объяснил русским языком, что программа должна делать.
NEW 12.05.06 17:31
in Antwort voxel3d 12.05.06 17:19
Может быть, потому, что stl и шаблоны сложны для двух месяцев?
Ему ж не самому их писать. Со стрингом работать проще чем с char*. Да и со стримами не сложнее чем с этим CStdioFile
Ему ж не самому их писать. Со стрингом работать проще чем с char*. Да и со стримами не сложнее чем с этим CStdioFile
NEW 12.05.06 17:33
in Antwort scorpi_ 12.05.06 17:00
Стандартно - при ексепшене, неотфиналеном, деструктор не будет вызван...
12.05.06 17:35
in Antwort scorpi_ 12.05.06 17:27
Это понятно было, я просто забыл порядок размещения объектов на стеке в виндовсе:
var_n, ..., var_1, EBP, return_adr, arg1, ..., arg_n.
var_n, ..., var_1, EBP, return_adr, arg1, ..., arg_n.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 17:36
in Antwort Murr 12.05.06 17:33
Не увиливай, вот этот бред сразу или при выходе из области определения - что значит?
NEW 12.05.06 17:38
in Antwort voxel3d 12.05.06 17:35
Локальные переменные в порядке декларации, порядок аргументов не определён. Только при чём тут это?
NEW 12.05.06 17:42
in Antwort scorpi_ 12.05.06 17:38, Zuletzt geändert 12.05.06 17:43 (voxel3d)
При том, что если не знать в какую сторону растёт стек и как размещаются переменные, можно представить, например, такую картину:
var_1, var_2, ..., var_n
где var_1 это ofile (где хэндл портился), а var_2 это тот самый char, в который буфер пытались записать; при росте стека вверх и таком размещении, испортить ofile не удастся.
p.s. (слева меньшие адреса, справа большие)
var_1, var_2, ..., var_n
где var_1 это ofile (где хэндл портился), а var_2 это тот самый char, в который буфер пытались записать; при росте стека вверх и таком размещении, испортить ofile не удастся.
p.s. (слева меньшие адреса, справа большие)
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 17:48
in Antwort scorpi_ 12.05.06 17:36
Я и не увиливаю - если объект не используется он может быть разрушен сразу после вызова конструктора, равно как разрушение объекта может быть отложено до выполнения последнего оператора в текущем блоке. Второе - проще в реализации.
NEW 12.05.06 17:51
in Antwort voxel3d 12.05.06 17:42
Ясно. Стек растёт вниз, так что всё правильно, ltoa будет писать по ofile. Мне собственно было всё равно где он будет писать, ясно, что там где не положено...
NEW 12.05.06 17:53
in Antwort scorpi_ 12.05.06 17:38
Локальные переменные в порядке декларации, порядок аргументов не определён.
------
Да, внесли в стандарт порядок создания переменных... По моему - зря. Для скалярных можно выделять непрерывный блок, а не скалярные - определять в конструкторе...
Порядков - два. слева направо, справо налево. Какой именно используется надо смотреть в доках на компайлер... в стандарте вроде не было ограничений.
------
Да, внесли в стандарт порядок создания переменных... По моему - зря. Для скалярных можно выделять непрерывный блок, а не скалярные - определять в конструкторе...
Порядков - два. слева направо, справо налево. Какой именно используется надо смотреть в доках на компайлер... в стандарте вроде не было ограничений.
NEW 12.05.06 18:05
in Antwort Murr 12.05.06 17:48
В стандарте чётко определено когда вызывается деструктор. Так что объект либо будет разрушен после function return, либо вообще не будет создан.
NEW 12.05.06 18:31
in Antwort scorpi_ 12.05.06 18:05
Сути необходимых действий это не меняет, но еще раз доказывает, что мне надо найти время и перечитать стандарт. Хотя... писать приходится на всем, кроме С++...

NEW 15.05.06 14:58
in Antwort scorpi_ 12.05.06 17:29
Программа читает файл по строчно, делает грамматический разбор каждой строчки. строка должна начинаться с объявления #define #ifdef ... и тому подобное, только тогда происходит разбор строки.
Со String действительно удобно работать, только возникают проблемы с е╦ конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
мне нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
не подскажите как можно сконвертировать или есть ли другие функции?
с iostream тоже много неопредел╦нности. как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
Со String действительно удобно работать, только возникают проблемы с е╦ конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
мне нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
не подскажите как можно сконвертировать или есть ли другие функции?
с iostream тоже много неопредел╦нности. как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
NEW 15.05.06 15:05
in Antwort JacksonB 15.05.06 14:58
У CString есть операторы для этого.
Остальное - читай книжки по STL, для форума это слишком объемный материал.
Остальное - читай книжки по STL, для форума это слишком объемный материал.
NEW 15.05.06 15:16
in Antwort JacksonB 15.05.06 14:58
> с iostream тоже много неопредел╦нности. как читает она строчку с файла
Ты имеешь в виду istream. Показали же: наследуешь класс от std::string и перегружаешь глобальный оператор >>. Про размер строки мысль не понял. Зачем его надо знать заранее?
Ты имеешь в виду istream. Показали же: наследуешь класс от std::string и перегружаешь глобальный оператор >>. Про размер строки мысль не понял. Зачем его надо знать заранее?
Dropbox - средство синхронизации и бэкапа файлов.
NEW 15.05.06 15:19
in Antwort JacksonB 15.05.06 14:58
http://www.cppreference.com/
> Со String действительно удобно работать, только возникают проблемы с еe конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
c_str, atol, atoi
> не нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
Нет проблем, ставь в atoi сразу чар с хекс значением.
> как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
В этом-то и прелесть. Он просто читает строчку, неважно какой она длины.
---
Ничто так не согревает душу, как холодное пиво
> Со String действительно удобно работать, только возникают проблемы с еe конвертацией в char или long или int.
есть функция strtol(char *c, char **endptr,int i)
c_str, atol, atoi
> не нужно преобразовать HEX число в Decimal. вот и проблема конвертации CString в Char.
Нет проблем, ставь в atoi сразу чар с хекс значением.
> как читает она строчку с файла, откуда я могу знать размер строчки заранее и т.д.
В этом-то и прелесть. Он просто читает строчку, неважно какой она длины.
---
Ничто так не согревает душу, как холодное пиво