![]() |
Ошибки новичков или индийский стиль...
Я написал небольшую программку. Хотел бы услышать мнения о том как она смотрится относительно идеологии C++. Т.е. незнаю возможно можно было как то сделать проще или лучше, записать короче и т.д. Зараннее спасиб :) :)
Код:
#include <vcl.h> |
Ну если прям так придираться, то:
1. Код:
cSect=(char*) malloc(strlen(sPtr)+1); Что, касается strcpy, то я лучше бы использовал strncpy, т.к. переполнение буфера не кто не отменял (хотя тут мб и не будет такого...). 2. Код:
fseek(binFile,atoi(cKey),0); 3. Вызываем malloc, но забываем вызвать free. |
Цитата:
Скажем так... А что если использовать sizeof тоже ищет нуль терминатор как и strlen? Или?! Код:
sPtr=sizeof(cSect); Цитата:
Цитата:
Цитата:
|
С помощью операции sizeof можно определить размер памяти которая соответствует идентификатору или типу. Если вы выделяете память char *c = malloc(...), то sizeof(c) вернёт, 1 байт. Так, что sizeof тут не прокатит.
Цитата:
P.S Цитата:
|
Я ещё немног подумал над алгоритмом и немного упростил всё...
терь так выглядит Код:
#include <vcl.h> |
Цитата:
Ну и конечно же,*если всё-таки хочется выделять память "руками", но нельзя забывать её освобождать замечания к функции int hstoi(char* hexstr) 1. Поскольку hexstr не изменяется, нужно использовать указатель на константу (иначе функция не сможет принимать константы в качестве аргументов) 2. В*цикле много раз выполняется операция pow(16,idx). Это жуткий "индуизм" :), проще каждый раз в цикле выполнять операцию умножения. for(int idx=0, powdx=1; idx<len; idx++, powdx *= 16) А поскольку у нас значение кратное степеням двойки, то ещё быстрее будет логический сдвиг единицы в числе. 3. Мегабаг. Если в функцию будет направлена длинная строка, то произойдёт целочисленное переполнение значения powdx (равно как и результата исходного вычисления). Нужно добавить проверку значения len |
Цитата:
|
Время: 21:22. |
Время: 21:22.
© OSzone.net 2001-