Как правильно создать CString неизвестной длины?

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

Я получаю из числа его запись в семиричном виде. Как мне правильно инициализировать строки (zac,chce,chdr) для этого?

CString* tose(float i)
{
int s = 0;
CString* zac=0;
char sem[7] = { '0', '1', '2', '3', '4', '5', '6' };
float ma;
float ex = modf(i, &ma);
int u = (int)ma;
CString* chce = new CString;
CString* chdr = new CString; 
chce[s] = '0';
chdr[s] = '0';
while (u != 0)
{

    chce[s] = sem[u % 7];           // вот на этом моменте прерывается
    s += 1;
    u = u / 7;
}
for (int t = s; t >= 0; t--)
    s = 0;
do {
    ex = ex * 7;
    ex = modf(ex, &i);
    chdr[s] = sem[(int)i];
    s = s + 1;
} while ((ex != 0) && (s < 6));
zac = chce + _T(',');
if (i < 0)
    zac = '-' + zac;
return (zac);
delete(chdr);   delete(chce);   delete(zac);}

При работе кода выше выходит ошибка:

Вызвано исключение по адресу 0x7B8512DD (mfc140ud.dll) в FCM45673.exe: 0xC0000005: нарушение 
прав доступа при чтении по адресу 0xFDFDFDF9.

UPD: Код, который заработал:

 {
    int s = 0;
    CString sem = _T("0123456");
    double ma;
    double ex = modf(sum, &ma);
    int u = (int)ma;
    char* reve = new char[bee];
    for (int gf1 = bee - 1; gf1 >= 0; gf1--)
    {
        reve[gf1] = sem[u % 7]; 
        u = u / 7;
    }
    for (int gf2 = 0; gf2 < bee; gf2++)
    {
        out = out + reve[gf2];
    }
    out = out + _T(",");
    for (int gf3 = 0; gf3 < bee; gf3++)
    {
        ex = ex * 7;
        ex = modf(ex, &sum);
        out = out + sem[(int)sum];
    }
    free (reve);
}````

Ответы

Ответов пока нет.