По разным причинам, которые я не буду здесь обсуждать, я пишу простой токенизатор на C. Ниже приведен пример, который я взломал, который изменяет размер буфера токена с заданными приращениями по мере необходимости при чтении символов из входного потока. В конечном итоге он достигнет размера самого большого токена, который, очевидно, может вместить меньшие токены. Это приемлемый подход? Если нет, как лучше определить правильный объем памяти, выделяемый для каждого токена?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define BUFF_CHUNK_SIZE 4
int main() {
int c, i, n;
char *buffer;
i = 0;
n = BUFF_CHUNK_SIZE;
buffer = (char *)calloc(n, sizeof(char));
while ((c = getchar()) != EOF) {
if (isalnum(c)) {
buffer[i] = (char)c;
i++;
if (i == n) {
n += BUFF_CHUNK_SIZE;
buffer = (char *)realloc(buffer, n * sizeof(char));
}
}
else {
if (i == 0) {
continue;
}
i = 0;
printf("%s\n", buffer);
memset(buffer, 0, sizeof(char) * n);
}
}
return 0;
}