|
|
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Написал функцию Копирования фрагмента строки в строку, начиная с Index символа и заканчивая Finish. Правильно ли она написана? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:48 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
лучше memcpy использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:57 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555лучше memcpy использовать чем лучше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:00 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555лучше memcpy использовать С memcpy у меня ошибку выкидывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:02 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:13 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 1. Да, малость перепутал в формулировке. 3) Посе копирования надо result[Finished] сделать равным нулем. - А это я не совсем понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:15 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. delete(result) - так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:16 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША 3) Посе копирования надо result[Finished] сделать равным нулем. - А это я не совсем понял strncpy Функция strncpy работает аналогично, кроме того, что копируютсятолько первые n байтов строки src. Таким образом, есл и в n байтах строки src нет нулевого байта, то строка результатане будет заканчиваться символом ‘\0’. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:17 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
перво-наперво - какова цель, и почему не использовать stl::string? а есть кусок кода, который отвечает за delete result? Или это надо всё-время помнить, что после copy надо вызывать delete? imho стиль довольно-таки опасный. Зачем использовать старые C-функции заместо новых возможностей C++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:17 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. Подразумевалось, что char* должен заканчиваться терминатором? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:17 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. delete(result) - так? Нет. Это после использования. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:18 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. Подразумевалось, что char* должен заканчиваться терминатором? Да. А в твоем коде это не детерминировано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:19 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555перво-наперво - какова цель, и почему не использовать stl::string? а есть кусок кода, который отвечает за delete result? Или это надо всё-время помнить, что после copy надо вызывать delete? imho стиль довольно-таки опасный. Зачем использовать старые C-функции заместо новых возможностей C++? Мне казалось, что так будет рациональнее и правельнее. Эту функцию надо будет потом вставить в dll и откомпилить на VC2006 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555перво-наперво - какова цель, и почему не использовать stl::string? а есть кусок кода, который отвечает за delete result? Или это надо всё-время помнить, что после copy надо вызывать delete? imho стиль довольно-таки опасный. Зачем использовать старые C-функции заместо новых возможностей C++? 1. Задание - проверить существующий код. 3. Да, стиля нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАША Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. delete(result) - так? Нет. Это после использования. Код: plaintext 1. 2. Итак Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:22 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh man_555перво-наперво - какова цель, и почему не использовать stl::string? а есть кусок кода, который отвечает за delete result? Или это надо всё-время помнить, что после copy надо вызывать delete? imho стиль довольно-таки опасный. Зачем использовать старые C-функции заместо новых возможностей C++? 1. Задание - проверить существующий код. 3. Да, стиля нет. А что подразумеваете под стилем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:23 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАМне казалось, что так будет рациональнее и правельнее. Эту функцию надо будет потом вставить в dll и откомпилить на VC2006 Конечно в некоторых случаях можно и так писать, это как исключения из правил. Но сам для себя должен иметь обоснования такому подходу. Желательно же, чтобы каждый уровень кода сам отвечал за память которую он выделяет. Т.е. выделил память, передал функции, получил результат, использовал, очистил память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:23 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАШАМне казалось, что так будет рациональнее и правельнее. Эту функцию надо будет потом вставить в dll и откомпилить на VC2006 Конечно в некоторых случаях можно и так писать, это как исключения из правил. Но сам для себя должен иметь обоснования такому подходу. Желательно же, чтобы каждый уровень кода сам отвечал за память которую он выделяет. Т.е. выделил память, передал функции, получил результат, использовал, очистил память. Вот меня и мучал вопрос об очистке памяти. Память мы выделили только Result, значит и очищать надо только результ, а вот в какое "место" вставить очищение - мне не понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:25 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh СИСАША Akh1) Finished - количество байт. Так и подразумевалось? 2) strncpy сюда действительно более подходит. 3) Посе копирования надо result[Finished] сделать равным нулем. 3. delete(result) - так? Нет. Это после использования. Код: plaintext 1. 2. Итак Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext Об этом и речь. Стиль плохой. Тебе надо будет не забывать, после вызова функции и использования результата очищать память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:25 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
AkhОб этом и речь. Стиль плохой. Тебе надо будет не забывать, после вызова функции и использования результата очищать память. Но Result у меня объявлена локально, я думал очищать память надо тоже в теле функции. Или можно и вне? А как тогда обратиться к локальной переменной? Или в качестве параметра в функцию добавить указатель на область памяти Result, а потом её очистить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:31 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАВот меня и мучал вопрос об очистке памяти. Память мы выделили только Result, значит и очищать надо только результ, а вот в какое "место" вставить очищение - мне не понятно Для функции strncpy передают блок памяти, причем те кто передает заранее должны побеспокоится, что памяти хватит. Почему бы тебе не сделать так же? Можно сделать с проверкой размера, если тебе его будут передавать. Тогда если не хватит памяти, то можешь вернуть ошибку или скопировать сколько влезет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:34 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША AkhОб этом и речь. Стиль плохой. Тебе надо будет не забывать, после вызова функции и использования результата очищать память. Но Result у меня объявлена локально, я думал очищать память надо тоже в теле функции. Или можно и вне? А как тогда обратиться к локальной переменной? Или в качестве параметра в функцию добавить указатель на область памяти Result, а потом её очистить? Разберись сначала. result у тебя локальная. Память у тебя глобальная. Ты возвращаешь локальную переменную. Что ты имеешь в результате? Ты имеешь значение указателя на данные, которые не в стеке а из кучи. Если бы они были из стека, то после выхода из функции ты их и использовать бы не мог. Значит ты имеешь все что надо - очищай глобальную память с указаением указателя на нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:38 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАШАВот меня и мучал вопрос об очистке памяти. Память мы выделили только Result, значит и очищать надо только результ, а вот в какое "место" вставить очищение - мне не понятно Для функции strncpy передают блок памяти, причем те кто передает заранее должны побеспокоится, что памяти хватит. Почему бы тебе не сделать так же? Можно сделать с проверкой размера, если тебе его будут передавать. Тогда если не хватит памяти, то можешь вернуть ошибку или скопировать сколько влезет. Для функции strncpy передают блок памяти - а как это сделать(или посоветуйте где прочитать). До меня без примеров туго доходит. И ещё хотел спросить - есть ли для BCB6 русский хелп, или для каких нить других версий? Я немного "туговат" в English ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:39 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh СИСАШАВот меня и мучал вопрос об очистке памяти. Память мы выделили только Result, значит и очищать надо только результ, а вот в какое "место" вставить очищение - мне не понятно Для функции strncpy передают блок памяти, причем те кто передает заранее должны побеспокоится, что памяти хватит. Почему бы тебе не сделать так же? Можно сделать с проверкой размера, если тебе его будут передавать. Тогда если не хватит памяти, то можешь вернуть ошибку или скопировать сколько влезет. Для функции strncpy передают блок памяти - а как это сделать(или посоветуйте где прочитать). До меня без примеров туго доходит. И ещё хотел спросить - есть ли для BCB6 русский хелп, или для каких нить других версий? Я немного "туговат" в English Передай указатель на память так же как и передавал указатель на строку Код: plaintext 1. 2. 3. или с указанием размера Код: plaintext 1. 2. 3. 4. Функции strncpy, memcpy и тому подобные - это функции стандартной библиотеки С++. С ними надо знакомится в учебнике по С++ или по С (а не билдер). Раздел, что-то про строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 15:55 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:12 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:16 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:23 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555 СИСАША man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ А есть Страструп в электронном виде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:24 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:50 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. Я просто не понял как "убить память". Смешно конечно реализовал, но попробую объяснить, что хотел. Вызываем функцию Copy, она выделяет память под result, выполняется и передается в Address адрес блока памяти, выделенного под result, ну а потом delete (&z) высвобождаем память, выделенную под result. Но по вашему вопросу я понял, что сделал не правильно. Мне как то на примере легче научиться :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:24 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. Я просто не понял как "убить память". Смешно конечно реализовал, но попробую объяснить, что хотел. Вызываем функцию Copy, она выделяет память под result, выполняется и передается в Address адрес блока памяти, выделенного под result, ну а потом delete (&z) высвобождаем память, выделенную под result. Но по вашему вопросу я понял, что сделал не правильно. Мне как то на примере легче научиться :)) Теперь понятно. Если делать как ты, то тогда: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Но можно и так: Код: plaintext 1. 2. 3. 4. 5. 6. Вызов Код: plaintext 1. 2. 3. Стиль же так же и осталься плохим. Зато теперь память будет очищаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:36 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:41 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
И ещё. Написал такой кусочек - Обработка события нажатия кнопки Код: plaintext 1. 2. 3. 4. 5. 6. 7. При первом нажатии кнопки её Caption принимает 10 . Если память при Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:47 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:57 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАИ ещё. Написал такой кусочек - Обработка события нажатия кнопки Код: plaintext 1. 2. 3. 4. 5. 6. 7. При первом нажатии кнопки её Caption принимает 10 . Если память при Код: plaintext Это хорошо, что у тебя еще не акссес виолейшен. Где завершающий нуль у Result, перед вызовом strcat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:00 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. А есть другие варианты реализации Copy у кого-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:26 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. Польностью согласен. От себя бы добавил, что если нет специальных ограничений для приложения, то лучше всё-таки пользоваться современным языком. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:29 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555лучше memcpy использовать то что для копирования строк можно использовать memcpy - это однозначно, и возможно, что программист не забудет поставить где надо завершающие нули, правильно вычислит размер нужного буфера. но все равно в коде будет логическая ошибка - mem*** предназначены для сырой памяти, а str*** - для с-строк. это и есть один из признаков плохого стиля - использовать для какого то типа данных, при наличии аналогичных функций, функции, предназначенные для другого, даже если они и работают как надо. оправдание такого подхода - это только жесткая оптимизация, но в этой задаче ей и не пахнет. man_555рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ а это вот почему? по какому критерию определяется сиплюсплюсистость:) класса? лежит ли он в STL или нет? string - это так называемый simple type, и все равно что он выведен из шаблона, конечный пользователь об этом не знает. кстати stl::string - нет такого :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:32 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555 Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. Польностью согласен. От себя бы добавил, что если нет специальных ограничений для приложения, то лучше всё-таки пользоваться современным языком. Код: plaintext 1. 2. 3. 4. Мне в конечном итоге надо получить DLL, у которой в параметрах функций будет только char* и int. Дайте ссылки на статьи или учебники(проверенные :)), где можно посмотреть и изучить "современный" язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:33 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
эх, отожгу man_555лучше memcpy использовать то что для копирования строк можно использовать memcpy - это однозначно, и возможно, что программист не забудет поставить где надо завершающие нули, правильно вычислит размер нужного буфера. но все равно в коде будет логическая ошибка - mem*** предназначены для сырой памяти, а str*** - для с-строк. это и есть один из признаков плохого стиля - использовать для какого то типа данных, при наличии аналогичных функций, функции, предназначенные для другого, даже если они и работают как надо. оправдание такого подхода - это только жесткая оптимизация, но в этой задаче ей и не пахнет. man_555рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ а это вот почему? по какому критерию определяется сиплюсплюсистость:) класса? лежит ли он в STL или нет? string - это так называемый simple type, и все равно что он выведен из шаблона, конечный пользователь об этом не знает. кстати stl::string - нет такого :) молодец, возьми с полки пряник! Чего не прдставился то? Хорошо, если по всем канонам, то std::basic_string, но заверю, что stl::string работает так же замечательно ;-). "Приплюснотость" определяется современными тенденциями. Конечно, С++ существует помимо привычек и вкусов своего создателя, но этот класс был создан именно для работы со строками. Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 21:39 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555Хорошо, если по всем канонам, то std::basic_string я просто хотел сказать что string это просто класс, не лучше или хуже чем другие. man_555но заверю, что stl::string работает так же замечательно ;-). ну не знаю, где это у вас работает, в vs2003 не хочет у меня суфлером ничего показывать, дальше смотреть было лень... покажите чтоли пример. man_555"Приплюснотость" определяется современными тенденциями. огласите их чтоли, а то непонятно, цикл for современен или надо уже везде for_each man_555Конечно, С++ существует помимо привычек и вкусов своего создателя, но этот класс был создан именно для работы со строками. мне кажется что AnsiString тоже был создан для работы со строками. мало того, в мфц приложении я буду использовать CString вместо string потому что он более родной для этой среды, несмотря ни на какие модные веяния. man_555Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... я чего то не пойму здесь. от каких концепций произведен отход? и эффективно с точки зрения чего? скорости работы, количества занимаемой памяти, повторного использования, легкости восприятия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 00:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАМне в конечном итоге надо получить DLL, у которой в параметрах функций будет только char* и int. Дайте ссылки на статьи или учебники(проверенные :)), где можно посмотреть и изучить "современный" язык. Во первых разберись, что такое указатели, и как их едят. Для этого тебе надо почитать учебник по с++. Например можешь поискать в сети автор Б. Керниган, Д. Ритчи Язык программирования Си Издание 3-е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана Невский Диалект, Санкт-Петербург 2001 В сети 100% где-то есть. Когда разберешься, обрати еще раз свое внимание на strncpy, которой ты пользуешься. Тогда сам увидишь что твоя функция может иметь интерфейс такого же плана, но в ней будет на один-два параметра больше (char* или char* и int). На счет типа с смысла возвращаемого значения тоже стоит подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:51 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... strncpy и memcpy - C. strncpy же не будет копировать мусор за строкой, а будет dst заполнять нулями. Это кстати дает еще один плюс - надежность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:55 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
И опять у меня аналогичное Функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И вызов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А стиля нет. "Подскажите" пример этого со стилем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 14:14 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А так стиль есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:44 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2029590]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 516ms |

| 0 / 0 |
