Kopieren von Daten aus einer text-Datei in ein anderes in C
Schreibe ich ein basic-Programm, das kopiert einen string aus einer vorhandenen text-Datei und kopiert den text in einen neue text-Datei. Ich bin fast da, aber ich habe ein paar kleine Probleme. Zuerst habe ich die Ausgabe der Zeile von text auf dem Bildschirm nach dem kopieren und es gibt mir 3 zufällige Zeichen nach dem string aus. Ich möchte wissen, warum dies geschieht. Auch das Programm ist das erstellen der neuen Textdatei aber nicht, den string in die Datei.
Hier ist mein code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char content[80];
char newcontent[80];
//Step 1: Open text files and check that they open//
FILE *fp1, *fp2;
fp1 = fopen("details.txt","r");
fp2 = fopen("copydetails.txt","w");
if(fp1 == NULL || fp2 == NULL)
{
printf("Error reading file\n");
exit(0);
}
printf("Files open correctly\n");
//Step 2: Get text from original file//
while(fgets(content, strlen(content), fp1) !=NULL)
{
fputs (content, stdout);
strcpy (content, newcontent);
}
printf("%s", newcontent);
printf("Text retrieved from original file\n");
//Step 3: Copy text to new file//
while(fgets(content, strlen(content), fp1) !=NULL)
{
fprintf(fp2, newcontent);
}
printf("file created and text copied to it");
//Step 4: Close both files and end program//
fclose(fp1);
fclose(fp2);
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern:
müssen Sie die
sizeof
arraycontent
, nicht die Länge.Auch nicht, wenn Sie initialisiert
content
bevor Sie esstrlen()
würde 0 zurückgeben, und Sie würden gelesen haben, nichts aus der Datei.Auch, wenn Sie wollen, zum erneuten Lesen der input-Datei beim schreiben der neuen Datei müssen Sie entweder
fclose()
die input-Datei und diefopen()
oderrewind()
es.fgets()
zu verwendensizeof
und sicherzustellen, dass Sie am Anfang der input-Datei wieder?while
Schleife. Das bedeutete, dass, wennfgets()
genannt wurde in der zweitenwhile
Schleife würde es schon bei der EOF.In strcpy die Reihenfolge der sec und dest Umgekehrt
Auch im Idealfall würde ich nicht kopieren, sondern concat auf den Puffer.
Diese veränderte version des Programms würde die Aufgabe:
den Sie in dieses:
_
fprintf(fp2, newcontent);_
und die Signatur von "fprintf" ist
int fprintf(FILE *stream, const char *format, ...);
u miss die