Да, можно использовать fgets()
и fputs()
.Если вы используете системы POSIX, вы можете найти getline()
лучше, чем fgets()
, но вы все равно будете использовать fputs()
с ним.Или вместо этого вы можете найти fread()
и fwrite()
.Все это работает с массивами - вы можете выбрать размер, вы, вероятно, будете использовать 4096 байт в качестве размера буфера.
Например:
char buffer[4096];
while (fgets(buffer, sizeof(buffer), fp) != NULL)
{
fputs(buffer, stdout);
fputs(buffer, fp2);
}
Или:
char buffer[4096];
size_t nbytes;
while ((nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp)) > 0)
{
fwrite(buffer, sizeof(char), nbytes, stdout);
fwrite(buffer, sizeof(char), nbytes, fp2);
}
Предупреждение: не скомпилированный код.
Обратите внимание, что теоретически вы должны проверить, что операции fwrite()
работают нормально (коротких записей нет).Код качества производства сделает это.Вам также следует проверить, что операции fputs()
также выполнены успешно.
Обратите внимание, что, как намекает на от user2357112 , исходный код будет работать с произвольными двоичными файлами (содержащимиnull bytes '\0'
) довольно счастливо (хотя stdout
может быть менее довольным).Использование fread()
и fwrite()
будет отлично работать с двоичными файлами, и единственная проблема с текстовыми файлами заключается в том, что они игнорируют символы новой строки и пишут блоки текста при чтении (что обычно не является реальной проблемой).