Как правильно создать CString неизвестной длины?
Я получаю из числа его запись в семиричном виде. Как мне правильно инициализировать строки (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);
}````
Источник: Stack Overflow на русском