Как на Си разбить строку на куски указанной длины?

Есть некая строка (точнее, массив символов) и я хочу разбить ее на несколько ровных кусков (получить массив массивов символов). Правда, последний может быть короче. Как это сделать?
  • Вопрос задан
  • 4650 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Это зависит от того, в каком виде вы хотите получить результат, и что вы понимаете под "разбиением".
Вот вам пример:
#include <stdio.h>
int main()
{
    char string[] = "123456789";
    char (*r)[3] = (char (*)[3])string;

    printf("%c%c%c", r[1][0], r[1][1], r[1][2]);
    return 0;
}


Уточните свой вопрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@DancingOnWater
Нафиг массив массивов, простой сделайте массив указателей и будет вам счастье.
Ответ написан
Комментировать
IlyaEvseev
@IlyaEvseev
Opensource geek
Не тестировалось!
/* Declare */
char s[] = "qwerrtrhfdbsgfvasdg";
const int fraglen = 3;

/* Parse */
int slen = strlen(s);
int nfrags = (slen + fraglen - 1 ) /  fraglen;
char *p[] = malloc(nfrags * sizeof(char*));
int i;
for (i = 0; i < nfrags; i++)
        p[i] = strndup(&s[i * fraglen], fraglen);

/* Print */
for (i = 0; i < nfrags; i++)
        printf("%d = \"%s\"\n", i, p[i]);

/* Done */
for (i = 0; i < nfrags; i++)
        free(p[i]);
free(p);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы