Простой, но эффективный способ сделать это - вообще избежать чтения в память и просто сделать следующее:
while ((input_char = fgetc(input_fp)) != EOF)
{
if (input_char != specificByte)
{
fputc(input_char, output_fp);
}
else
{
/* do something with input_char */
}
}
Это теоретически неэффективно, поскольку вы читаете один символ за разиз буфера, который может быть дорогостоящим.Тем не менее, для многих приложений это будет работать просто отлично, тем более что чтение файлов буферизируется стандартной библиотекой C.
Если вы заботитесь об эффективности и хотите минимизировать вызовы в файловых функциях, используйте что-то вроде следующего.
/* Don't loop through the chars just to find out the file size. Instead, use
* stat() to find out the file size and allocate that many bytes into array.
*/
char* array = (char*) malloc(file_size);
fread(array, sizeof(char), file_size, input_fp);
/* iterate through the file buffer until you find the byte you're looking for */
for (char* ptr = array; ptr < array + file_size; ptr++);
{
if (*ptr == specificByte)
{
break;
}
}
/* Write everything up to ptr into the output file */
fwrite(array, sizeof(char), ptr - array, output_fp);
/* ptr now points to the byte you're looking for. Manipulate as desired */