Копирование данных из одного текстового файла в другой в C - PullRequest
1 голос
/ 01 декабря 2011

Я пишу основную программу, которая копирует строку из существующего текстового файла и копирует текст в новый текстовый файл. Я почти там, но у меня есть несколько небольших проблем. Сначала я вывожу строку текста на экран после копирования, и она дает мне 3 случайных символа после строки. Я хочу знать, почему это происходит. Также программа создает новый текстовый файл, но не помещает строку в файл.

Вот мой код:

#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;
}

Ответы [ 4 ]

1 голос
/ 01 декабря 2011

Вам нужно изменить:

while(fgets(content, strlen(content), fp1) !=NULL)

вам нужен sizeof массив content, а не длина.

while(fgets(content, sizeof(content), fp1) !=NULL)

Даже если вы инициализировали contentперед его использованием strlen() вернет 0, и вы ничего не прочитаете из файла.

Кроме того, если вы хотите перечитать входной файл при записи нового файла, вам нужно либо fclose()входной файл и fopen() это или rewind() это.

1 голос
/ 08 декабря 2015

Эта измененная версия программы будет выполнять работу:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char content[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("\nError reading file\n");
        exit(0);
    }
    printf("\nFiles open correctly\n");

    //Step 2: Get text from original file//
    while(fgets(content, sizeof(content), fp1) !=NULL)
    {
        fprintf(fp2, "%s", content);
    }

    printf("File created and text copied to it\n\n");

    //Step 4: Close both files and end program//
    fclose(fp1);
    fclose(fp2);
    return 0;
}
1 голос
/ 01 декабря 2011

В strcpy порядок sec и dest меняется на противоположный

В идеале, я бы не копировал, а скорее конкатрировал в буфер.

0 голосов
/ 30 августа 2016

вы использовали в этом: _ fprintf (fp2, newcontent); _

и подпись "fprintf" является int fprintf (FILE * stream, const char * format, ...);ты скучаешь по

...