Я пытаюсь распечатать содержимое файла с примерно 4000 символами. Как-то программа записывает только первые 220 символов и заканчивается.Весь файл не читается в C (EOF встречается неожиданно)
int main(void)
{
char ch = ' ', file_name[25], payload[3904];
FILE *fp;
printf("Enter the name of file you wish to see\n");
gets(file_name);
fp = fopen(file_name, "r"); // read mode
if (fp == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
printf("The contents of %s file are :\n", file_name);
int gin = 0;
while ((ch = fgetc(fp)!=EOF))
{
printf("%d) %x \n",gin, ch);
payload[gin++] = ch;
}
printf("Also, value of gin is %d --->", gin);
getchar();
//...rest of the code
}
Здесь значение gin
является 220.
Просто, чтобы проверить, я изменил while()
условие запуска для точного количества символов в файле:
{
//...
while (gin<3904)
{
if ((ch = fgetc(fp)) == EOF) res++;//ADDED THIS TO COUNT NUMBER OF EOF's
printf("%d) %x \n",gin, ch);
payload[gin++] = ch;
//printf(" %x \n", payload[(gin - 1)]);
if (gin % 100 == 0)
{
printf("Also, value of res is %d --->", res); getchar();
getchar();
}
}
//...rest of the code
}
Величина gin достигает 3904, значение res (количество EOF) равно 3684, что означает, что каждый символ после первого 220 считывается как EOF. Программа начинает читать FF
после первого 220 символов, даже если она заполнена.
Вы хотите сделать '' c' в int'. Посмотрите, какой тип 'fgetc()' возвращает. – alk
'gets()' is danger ... вместо этого используйте 'fgets()'. –
@sourav он говорит: «слишком мало символов для фейсов» –