Grava em um arquivo usando fputs em C

Alguém poderia me dizer por que o arquivo não muda? Funciona quando eu usorewind oufseek mas não de outra forma.

Qual é a maneira padrão de usarfputs depois defgets. O indicador de arquivo está na posição 9, portantofputs deve escrever depois disso, mas não faz nada.

No arquivo:

abcd efgh ijkl mnor

No código fonte:

char c;
char str[15];

FILE *fp = fopen("d:\\data.txt","r+");

fgets(str, 10, fp);

// fseek(fp, 9, SEEK_SET);
// rewind(fp);

printf("%d\n", ftell(fp));
// ftel shows that it's in "9".

printf("%s", str);

fputs(str, fp);
// why its not working

fclose(fp);

questionAnswers(2)

yourAnswerToTheQuestion