2017-09-24 3 views
0

Je lis un fichier appelé data.txt avec se présente comme suit:Lors de la lecture d'un fichier avec 3 caractères par ligne, sizeof (char) ne fonctionne pas

b 5 
b 2 
b 9 

Chaque ligne dispose de 3 caractères: l'espace entre étant un onglet. J'ai le code suivant pour lire une ligne à la fois. SingleLine est fondamentalement le tampon que le texte de chaque ligne est mis en. Je l'ai fait à l'origine comme char singleLine[20], un nombre arbitraire assez grand, mais je veux que ce soit exact, donc j'ai fait char singleLine(3*sizeof(char)). Ma logique était chaque ligne a 3 caractères, donc cela devrait fonctionner.

Malheureusement, il n'a pas, lors de l'exécution, il imprimé comme ce qui suit:

b 

5 

b 

2 

b 

9 

Quand je fais la façon insouciante, char singleLine[20], cela fonctionne correctement, comme indiqué ci-dessous. Mais je veux le faire correctement. Qu'est-ce qui ne va pas?

b 5 
b 2 
b 9 
+0

Pas une réponse à votre question, mais: 'sizeof (char)' est toujours '1', donc il y a rarement une raison de l'écrire explicitement. – ruakh

+0

La * bonne façon * ne doit pas être si avare avec la taille de votre tampon. Si vous pensez que votre taille maximale est '3', alors un tampon char' '32' devrait suffire. Et voyez [** Pourquoi est-ce que (! Feof (fichier)) a toujours tort? **] (http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong). –

+4

'fgets()' veut lire un _line_ de texte comme 'b',' tab', '5',' line feed' - c'est-à-dire 4 caractères. Après avoir lu un _line_, 'fgets()' ajoute un _null character_. Donc 'singleLine []' devrait être au moins 'singleLine [5]'. – chux

Répondre

2
  1. Votre tableau a de place que pour deux caractères et la terminaison nulle.
  2. Vos lignes comportent quatre caractères (y compris un saut de ligne).