复制时最后的额外字符?

时间:2015-07-25 19:01:18

标签: c copying

这让我很疯狂我正在尝试使用以下代码创建一个简单的程序来复制任何类型的文件,但我得到的结果是意外的(复制文件末尾有一个或两个额外的字符?)。例如,如果我的原始文件有This is an example,则复制的文件包含This is an exampleÿ

CODE

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

int main()
{
    FILE *fp,*fpp;
    char pbuff, fname[32];
    int i;

    printf(" FILE NAME TO OPEN : ");
    scanf(" %32s", fname);
    fp = fopen(fname, "rb");
    fpp = fopen("file", "wb");
    if(fp==NULL)
    {
        printf("NO SUCH FILE. EXITING NOW.");
        getch();
        exit(1);
    }

    while(!feof(fp))
    {
        pbuff = fgetc(fp);
        fputc(pbuff, fpp);
    }

    printf("SUCCESSFULLY CREATED!");
    fclose(fp);
    fclose(fpp);
    getch();
    return(0);
}

任何人都可以帮我解决这个问题吗?我会非常感激。

1 个答案:

答案 0 :(得分:2)

原因是.service('ticketModel',function() { var self = this; self.ticketArray = []; } .controller('ticketsController', function($scope,$statePrams,ticketModel) { ticketModel.ticketArray.push($stateParams.productId); console.log(ticketModel.ticketArray); }) (与大多数语言/环境中的大多数文件结束指示符一样)仅在达到文件结尾后设置。由于您编写了角色并且只检查了EOF状态,因此您需要编写1个太多字符。如果在通话过程中达到了文件结尾,则feof的返回值是预定义的EOF。

您可以通过以下两种方式之一解决这个问题:

fgetc

或:(编辑为正确注意到melpomene!)

while(true)
{
    pbuff = fgetc(fp);
    if(feof(fp))
         break;
    fputc(pbuff, fpp);
}