Как переделать код под динамическую память?

Рейтинг: 0Ответов: 2Опубликовано: 21.06.2011

Форматированный кусок кода: char strToAdd[100000]=""; char Temp[100]="";

sprintf_s(Temp,"%d",myBaseData.GetLength(i-1));
temp = atoi(Temp);
for(int j=0; j<temp; j++){
    sprintf_s(Temp, "%.2f", myBaseData.GetSeq(1, j+int(myBaseData.GetLabel(i-1))));
    strcat_s(strToAdd, Temp);
    sprintf_s(Temp, "%.2f", myBaseData.GetSeq(0, j+int(myBaseData.GetLabel(i-1))));
    if (atof(Temp)>=0)
        strcat_s(strToAdd, "+");
    strcat_s(strToAdd, Temp);
    strcat_s(strToAdd, "i; ");
}
item.pszText=(LPSTR)(strToAdd);

Как этот кусок кода можно переделать под динамическую память?

Ответы

▲ 2

На C вместо

char strToAdd[100000] = "";
char Temp[100] = "";

имеем

char *strToAdd = (char *)malloc(100000);
char *Temp[] = (char *)malloc(100);

Перед использованием проверка:

if (strToAdd != NULL && Temp != NULL) {
}

После использования освобождение:

free(strToAdd);
free(Temp);

А остальное без изменений.

▲ 2

Ну, а если вместо чистых Сей у Вас C++, будет похоже, но немного по-другому:

char* strToAdd = new char[100000];
char* Temp = new char[100];' // хотя лучше всё-таки оставить буфер в стеке.

проверка перед использованием не нужна: new никогда не возвращает NULL, при ошибке выкинет exception, который не заметить сложно.

после использования освобождение:

delete [] strToAdd;
delete [] Temp;

А вообще для строк лучше либо использовать готовый класс (std::string из STL, CString из MFC, к примеру), либо взять хороший чужой код, и только в крайнем случае писать свой, но только один раз и на все случаи жизни и аккуратно.