在C中将数据从一个文本文件复制到另一个文本文件

时间:2011-11-30 22:27:35

标签: c file-io copy

我正在编写一个基本程序,它从现有文本文件中复制字符串并将文本复制到新的文本文件中。我快到了,但我有一些小问题。首先,我在复制后将文本行输出到屏幕,它在字符串后面给我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 个答案:

答案 0 :(得分:1)

在strcpy中,sec和dest的顺序相反

理想情况下,我不会复制,而是连接到缓冲区。

答案 1 :(得分:1)

您需要更改:

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

您需要sizeof数组content,而不是长度。

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

即使您在使用content之前已初始化strlen(),也会返回0并且您不会从文件中读取任何内容。

此外,如果您想在编写新文件时重新读取输入文件,则需要fclose()输入文件和fopen()rewind()

答案 2 :(得分:1)

该程序的修改版本可以完成这项工作:

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

答案 3 :(得分:-3)

你用过这个: _  fprintf(fp2,newcontent); _

和“fprintf”的签名是 int fprintf(FILE * stream,const char * format,...); 你错过了