Вернуть символ * вместо строки

0

Я пытаюсь использовать unsigned решение user434507 здесь:

C++ задача производительности: integer to std :: string conversion

но вместо этого я хочу, чтобы он возвращал char * и не принимал строку.

Я играл с ним некоторое время, и это то, что у меня есть, но оно просто ничего не возвращает/мусор. Мои ограниченные знания C и указателя не помогают мне. Я думаю, что я использую malloc справа, но в его исходном коде он как бы использует внутренний символ * и только что изменил элементы строки и вернул строку. Я решил, что если бы я выделил через malloc, он бы имел тот же эффект:

char * itostr(unsigned val)
{

    const char digit_pairs[201] = {
      "00010203040506070809"
      "10111213141516171819"
      "20212223242526272829"
      "30313233343536373839"
      "40414243444546474849"
      "50515253545556575859"
      "60616263646566676869"
      "70717273747576777879"
      "80818283848586878889"
      "90919293949596979899"
    };

    int size;
    if(val>=10000) {
        if(val>=10000000) {
            if(val>=1000000000) {
                size=10;
            } else if(val>=100000000) {
                size=9;
            } else {
                size=8;
            }
        } else {
            if(val>=1000000) {
                size=7;
            } else if(val>=100000) {
                size=6;
            } else {
                size=5;
            }
        }
    } else {
        if(val>=100) {
            if(val>=1000) {
                size=4;
            } else {
                size=3;
            }
        } else {
            if(val>=10) {
                size=2;
            } else {
                size=1;
            }
        }
    }

    char * c = (char *)malloc(size + 1);
    c[size] = '\0';

    //char* c = &s[size-1];
    while(val>=100)
    {
       int pos = val % 100;
       val /= 100;
       *(short*)(c-1)=*(short*)(digit_pairs+2*pos); 
       c-=2;
    }
    while(val>0)
    {
        *c--='0' + (val % 10);
        val /= 10;
    }


    return c;
}
Теги:
malloc
char
cstring

1 ответ

0
Лучший ответ
c += size-1;

Вам нужна эта линия как раз перед первым в while цикл. Две циклы записывают цифры справа налево. Это необходимо, чтобы запись начиналась с правого конца строки.

  • 0
    Эта строка отсутствует в его перегруженной функции без знака. Но я вижу это в его подписи.
  • 0
    char* c = &s[size-1]; в неподписанной версии делает то же самое. c начинает указывать на индекс size-1 го массива.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню