Перейти к содержанию
    

Как скопировать символы из обычного буфера в массив строк?

1 minute ago, Aleksandr Baranov said:

на strcpy, слегка изменив программу

Эээ... Ммм... Если нетрудно, можно поподробнее, для тупых? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://stackoverflow.com/questions/14020380/strcpy-vs-strdup#:~:text=strdup allocates memory for the,the heap or the stack.&text=In the accepted answer%2C the,)%3B strcpy(ptr2%2Cptr1)%3B

strdup резервирует в хипе память, копирует туда строку и возвращает указатель.  Для того, чтобы прменить strcpy Вы должны сами позаботиться о строке, куда будете копировать.

Кстати, потом, видимо, надо результат этого стрдупа высвободить

Изменено пользователем Aleksandr Baranov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал как в статье по ссылке


char *strdup(const char *src) {
    size_t len = strlen(src) + 1;
    char *s = malloc(len);
    if (s == NULL)
        return NULL;
    return (char *)memcpy(s, src, len);
}

Схавал компилятор это.

Дальше применяю:

char months[] = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
    char** tokens;

   tokens = str_split(months, ',');

 if (tokens)
    {
        int i;
        for (i = 0; *(tokens + i); i++)
        {
            printf("month=[%s]\n", *(tokens + i));
            free(*(tokens + i));
        }
        printf("\n");
        free(tokens);
    }

смотрю опосля в отладчике переменную tokens. В ней только один элемент - нулевой, он правильный.

Хотя в цикле 

if (result)
    {
        size_t idx  = 0;
        char* token = strtok(a_str, delim);

        while (token)
        {
            assert(idx < count);
            *(result + idx++) = strdup(token);
            token = strtok(0, delim);  // ставлю брейкпоинт, token всегда правильный
        }
        assert(idx == count - 1);
        *(result + idx) = 0;
    }

ставлю брейкоинт - token всегда правильный.

Где косяк?

Блин... не умею просто пользоваться отладчиком. Все нормально, все разбивается по разделителю, все читается.

Изменено пользователем Salamander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...