我不想看到文件输出的最后一个字符

时间:2016-11-26 18:50:56

标签: c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv){

FILE *fp;
if((fp=fopen("Example.txt", "r"))== NULL){
    printf("Errore apertura file");
    exit(0);
}
char s[50];
int i=0;
while(!feof(fp)){
if(!feof(fp)){
s[i++]=fgetc(fp);
    }
}
s[i]='\0';
fclose(fp);
char nome[20];
printf("Inserisci il nome che vuoi dare al file di uscita\n");
//fgets(nome,20,stdin);
scanf("%s",& nome);
char tipo[5]=".txt";
strcat(nome,tipo);
if((fp=fopen(nome,"w"))== NULL){
    printf("Errore apertura file");
    exit(0);
}
fputs(s, fp);
fclose(fp);
return 0;  
}

字符串上的输出文件甚至打印出异常字符,怎么看不到呢? 输出是“string”+'ÿ' 问题仅出在输出文件中而不是捕获中。

1 个答案:

答案 0 :(得分:0)

您的输入循环应为:

char s[50];
int i=0;
int c;
while (i < (50 - 1) && (c = fgetc(fp)) != EOF)
    s[i++] = c;
s[i] = '\0';

甚至:

char s[50];
int i;
int c;
for (i = 0; i < (50 - 1) && (c = fgetc(fp)) != EOF; i++)
    s[i] = c;
s[i] = '\0';

这些可以避免缓冲区溢出,也不会尝试将EOF存储在数组s中。他们也没有使用feof();您很少需要使用它,当您这样做时,它是在循环结束后您需要区分EOF和读取错误(另请参阅ferror())。