12
votes

Fread Fread non terminant String par \ 0

Nouveau sur les fichiers en C, essayant de lire un fichier via Fread

Voici le contenu du fichier: p> xxx pré>

code utilisé: p>

char c[6];
fread(c,1,5,f1)


1 commentaires

Fread ne lit que des octets dans des tampons. Cela ne sait rien de ce que vous appelez une chaîne.


3 Réponses :


13
votes

Non. La fonction Fread lit simplement un certain nombre d'éléments, il n'a aucune notion de "chaînes".

  • Vous pouvez ajouter le terminateur Nul vous-même
  • Vous pouvez utiliser fgets / FSCANF au lieu de

    Personnellement, j'irais avec fgets .


1 commentaires

Pour les personnes intéressées, un exemple de mise en œuvre pour supprimer la nouvelle ligne de Fgets est donné ici: Stackoverflow.com/Questtions/2693776/...



1
votes

the page man pour Fread ne dit rien de l'ajout d'un zéro à la fin de le fichier.

Si vous souhaitez être en sécurité, initiez tous les octets de votre tableau C pour être zéro (via Bzero ou quelque chose comme ça) et lorsque vous lisez dans vous, vous aurez alors une null de terminaison.

J'ai lié les deux pages de l'homme pour Fread et bzero et j'espère que cela vous aide à sortir.


1 commentaires

BZERO () est obsolète (et a été supprimé de POSIX.1-1-2008) en faveur de < Code> Memset () .



4
votes

Désolé je suis un peu tard à la fête.

Non, Fread ne gère pas cela pour vous. Cela doit être fait manuellement. Heureusement, ce n'est pas difficile. J'aime utiliser Fread () 'S Retour pour régler la nul comme SO: P>

char buffer[16+1]; /*leaving room for '\0' */
x = fread(buffer, sizeof(char), 16, stream);
buffer[x]='\0';


0 commentaires