#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”+'ÿ' 问题仅出在输出文件中而不是捕获中。
答案 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()
)。