サイズが大きくなる配列が必要な場合は、たとえば、すべての文字列が正確に20 文字になることがわかっている場合、メモリを動的に割り当てる以外に選択肢はありません。
#define STR_SIZE 20
char* values = NULL;
int nb = 0;
...
// Called every time a string is received
// Here valuesPtr is a char** since we want to change values
void appendStr(char** valuesPtr, int* nb, char* string) {
if (*nb == 0) { // First item
*valuesPtr = malloc(STR_SIZE);
} else { // The size of the array changes : realloc it
*valuesPtr = realloc(*valuesPtr, STR_SIZE * (*nb + 1));
}
if (*valuesPtr == NULL) { // Something went wrong !
perror("malloc/realloc");
exit(1);
}
// Copy the new string at the right place
memcpy(*valuesPtr + STR_SIZE * (*nb), string, STR_SIZE);
*nb++;
}
コードの残りの部分では、n 番目の文字列へのアクセスは次のように行われます。
values + (STR_SIZE * nb)