Tout d'abord, vous devez allouer de la mémoire pour votre tampon charArr
; comme il est écrit, charArr
ne pointe pas initialement nulle part significative:
char *charArr = malloc(SOME_INITIAL_SIZE);
où SOME_INITIAL_SIZE est assez grand pour gérer la plupart des cas. Pour les moments où ce n'est pas assez grand, vous devrez étendre le tampon en utilisant realloc()
. Cela signifie que vous devez également garder une trace de la taille actuelle du tampon:
size_t currentSize = 0;
size_t i = 0;
char *charArr = malloc(SOME_INITIAL_SIZE);
if (!charArr)
{
/**
* memory allocation failed: for this example we treat it as a fatal
* error and bail completely
*/
exit(0);
}
currentSize = SOME_INITIAL_SIZE;
while ((readchar = fgetc(fp)) != EOF)
{
/**
* Have we filled up the buffer?
*/
if (i == currentSize)
{
/**
* Yes. Double the size of the buffer.
*/
char *tmp = realloc(charArr, currentSize * 2);
if (tmp)
{
charArr = tmp;
currentSize *= 2;
}
else
{
/**
* The realloc call failed; again, we treat this as a fatal error.
* Deallocate what memory we have already allocated and exit
*/
free(charArr);
exit(0);
}
}
charArr[i++] = readchar;
}
Ne pas oublier d'ajouter une terminaison 0 si vous traitez le tableau comme une chaîne.
EDIT
Cependant, la grande question est pourquoi vous pensez que vous devez lire en mémoire le contenu de l'ensemble du fichier avant de filtrer les données? Pourquoi ne pas filtrer au fur et à mesure?
Dupliquer (je pense) de cette question http://stackoverflow.com/questions/1969242/c-question-how-to-get-two-consecutive-chars-from-a-stream posté hier par le même utilisateur. –
en dehors du fait que «je» n'est jamais incrémenté, et cela est très enclin à buffer overflows, ce qui ne va pas avec ce que vous faites? – James
J'ai oublié de l'ajouter. Ce que j'essaie de faire est de diviser un fichier en mots et après cela de filtrer ces mots – bozhidarc