Условия while
неверны.Поскольку c
- это длина строки, line[c]
указывает на нулевой символ, который ее заканчивает.Это никогда не может быть '\n'
.И line[c-1]
- это '\n'
, который заканчивает строку (за исключением, возможно, последней строки в файле), поэтому он никогда не будет '5'
(если последняя строка не заканчивается на '5'
).И, конечно, line[c-2]
и line[c-3]
также находятся вне позиции.
То, что вы действительно хотите:
while (! (4 <= c && line[c-4] == '2' && line[c-3] == '5' && line[c-2] == '5' && line[c-1] == '\n')) {
С некоторыми улучшениями:
void headerinfo(FILE *infile, FILE *outfile)
{
char line[100];
size_t c;
do
{
fgets(line, sizeof line, infile);
c = strlen(line);
if (line[0] != '#')
fputs(line, outfile);
} while (! (4 <= c && strcmp(&line[c-4], "255\n") == 0));
}