Comment fgets() une ligne spécifique à partir d'un fichier en C?

Donc, j'essaie de trouver un moyen de fgets() une ligne spécifique dans un fichier texte en C, pour copier le contenu de la ligne dans une base plus permanente de la mémoire tampon:

Essentiellement, je me demandais si il y avait un moyen de le faire sans avoir quelque chose de similaire pour le code suivant:

FILE *fp;
fp = fopen(filename, "r");

char line[256];
char * buffer;
int targetline = 10;
while( targetline > 0)
{
    fgets(line, 256, fp)
}

buffer =(char*)malloc(sizeof(char) * strlen(line));
strcpy(buffer, line);

Donc, fondamentalement, je ne veux pas à parcourir le fichier n-1 fois juste pour arriver à la nième ligne... il ne semble pas très efficace (et, de ce fait les devoirs, j'ai besoin d'obtenir un 100% haha).

Toute aide serait appréciée.

  • Si vos lignes peuvent avoir une longueur arbitraire, comment vous attendez-vous à sauter n lignes en temps constant?
  • La seule vraie solution est de construire un indice de l'endroit où chaque ligne commence (lire le fichier une fois, la construction de l'index, puis vous pouvez l'utiliser pour chercher directement à une ligne jusqu'à ce que les modifications du fichier). Notez également que votre malloc besoin pour ajouter 1 à laisser de l'espace pour le NUL de terminaison.
  • Certains mécanismes de stockage des fichiers texte pourrait plausiblement fournir un moyen d'accéder à la Nième ligne en temps constant, ou au moins mieux que le temps linéaire. Probablement certains des formats de fichiers utilisés sur les machines virtuelles ce faire. Mais la bibliothèque C standard ne pas exposer de tels mécanismes, et sur la plupart des systèmes d'exploitation, il n'est même pas possible pour les fichiers de texte brut, à moins que vous créez un index vous-même. Il n'est donc pas déraisonnable de question, mais la réponse est non.
InformationsquelleAutor gfppaste | 2011-11-17