2016-07-19 5 views
-2

Ich arbeitete mit grundlegenden fputc Anwendung in C. Ich schreibe/anhängende "." in der Dateinummer mit für Schleife. Aber die Datei zeigt Müllbriefe anstelle von "." .Warum "fputc" hier nicht funktioniert? Es wirft Müllbriefe

#include <stdio.h> 
int main() 
    { 

     int i = 0 ; 
     FILE *txtfile ; 
     txtfile = fopen ("fullstop.txt" , "a") ; 
     for (; i < 100 ; i++) 
      { 
       fputc ( "." , txtfile) ; 
      } 
     fclose (txtfile) ; 
     return 0 ; 

    } 

Ich sehe keine syntaktischen Fehler im Code, aber vielleicht liege ich falsch. GCC zeigt folgende Warnungen und Fehler beim Kompilieren.Dies kann helfen.

warning: passing argument 1 of ‘fputc’ makes integer from pointer without a cast [-Wint-conversion] 
fputc ( ".", txtfile) ; 
     ^
/usr/include/stdio.h:573:12: note: expected ‘int’ but argument is of type ‘char *’ 
extern int fputc (int __c, FILE *__stream); 

Es funktioniert, wenn ich stattdessen mit fprintf ersetzen.

fprintf(txtfile,"."); 

Ich versuchte Fflush auch, aber es hat auch nicht geklappt.

Also, meine Frage ist, warum fputc nicht funktioniert?

+0

'man fputc' ... benutz' 'fputs'' anstatt oder gib ihm das richtige Argument: es braucht den ASCII-Code für das Zeichen versuche mit' 46' anstelle von '". "' – mguijarr

+5

@mguijarr Hell-Nr. Es gibt absolut keine Entschuldigung dafür, '46' zu tippen, wenn Sie' '.'' meinen, zumindest nicht in irgendeinem Code, der entfernt lesbar ist. – hvd

+1

Sie übergeben eine Zeichenfolge, für die ein Zeichen erforderlich ist. Verwenden Sie einfache Anführungszeichen. –

Antwort

4

Das erste Argument zu fputc() muss ein einzelnes Zeichen, keine Zeichenfolge.

fputc('.', txtfile); 

Wenn Sie eine Zeichenfolge übergeben, wird es in einen Zeiger umgewandelt und dann fputc() behandelt diesen Zeiger als einen Zeichenwert, der in Müll führt.

+0

Danke für die Hilfe. Yup, es hat funktioniert. – skshetry

+0

@hvd dies könnte ein wenig erklären, http://meta.stackoverflow.com/questions/255459/is-it-okay-to-downvote-answers-to-bad-questions –