Лишние пробелы написаны в режиме r+
В приведенном ниже коде добавляются дополнительные spcaes (может быть около 300 пробелов), если я пишу данные после поиска файлового указателя на начальную позицию после строки
fseek(fp1,0,SEEK_SET);
Если я прокомментирую второй вызов функции fputs(), это не проблема. Кроме того, введенные данные не добавляются в конце, вместо них добавляются только пробелы. Я не могу определить проблему.
Я использую компилятор TDM-GCC-64.
Для тестирования файл file1.txt вначале содержал "Welcome to You All". Введенные данные: "Сегодня". Вывод после выполнения программы: "Сегодня я Вам всем", за которым следуют много пробелов.
int main()
{
FILE *fp1;
char ch;
char data[50];
fp1=fopen("file1.txt", "r+");
if(fp1==NULL)
{
printf("Error in Opening the file\n");
return(0);
}
printf("Read and Write Mode. The data in the file is\n");
while((ch=getc(fp1))!=EOF)
{
putc(ch,stdout);
}
// Write some data at the end of the file
printf("\nEnter some data to be written to the file\n");
gets(data);
fseek(fp1,0,SEEK_END);
fputs(data,fp1);
fseek(fp1,0,SEEK_SET);
fputs(data,fp1);
printf("data in file after write operation is\n");
while((ch=getc(fp1))!=EOF)
{
putc(ch,stdout);
}
fclose(fp1);
return 0;
}
1 ответ
Вы должны проверить мелкий шрифт в fopen
документация:
В режиме обновления ('+') могут выполняться как ввод, так и вывод, но за выводом не может следовать ввод без промежуточного вызова fflush, fseek, fsetpos или rewind, а за вводом не может следовать вывод без промежуточного вызова fseek, fsetpos или rewind, если операция ввода не встретила конец файла.
Чтение и запись могут быть буферизованы, но все же использовать одну позицию файла. Переключение режимов без оповещения о времени выполнения (fseek
) может испортить буферизацию. Как вы заметили!