Alternativa A
Análise da Questão
Esta questão aborda a manipulação de arquivos em linguagem C, especificamente como modificar um arquivo existente sem apagar seu conteúdo original. O objetivo é substituir caracteres na primeira linha mantendo o restante do arquivo intacto.
Passo a Passo da Lógica do Código
- Abertura do Arquivo:
O comando arq=fopen("atividade.txt", "__"); precisa abrir o arquivo em modo de leitura e escrita, mas sem truncar (apagar) o conteúdo.
- A opção correta é
"r+". - O modo
"w+" criaria um arquivo vazio, perdendo os dados existentes.
- Salvamento da Posição:
Antes de ler a linha, precisamos saber onde ela começa no arquivo para escrevermos de volta depois.
- A função
ftell(arq) retorna a posição atual do ponteiro do arquivo. - Assim:
pos = ftell(arq); armazena o endereço inicial da primeira linha.
- Leitura e Modificação:
O código lê a linha com fgets, modifica o texto dentro da variável linha (troca 'i' por 'y') e agora precisa gravar essa nova versão no lugar exato onde estava a antiga. - Retorno à Posição Anterior:
Após ler, o ponteiro do arquivo está no fim da linha lida. Para sobrescrever, devemos voltar ao início.
- A função
fseek(arq, pos, SEEK_SET) move o ponteiro para a posição pos (que salvamos antes), relativa ao início do arquivo (SEEK_SET).
- Gravação do Conteúdo:
Precisamos escrever a string inteira contida em linha.
- A função
fputs(linha, arq) grava strings completas. - A função
fputc seria usada apenas para caracteres individuais, o que tornaria a alternativa incorreta.
Tabela Comparativa das Funções Usadas
| Função | Propósito | Exemplo no Código |
|---|
fopen | Abre/cria arquivo | fopen(..., "r+") |
ftell | Retorna posição atual | pos = ftell(arq) |
fseek | Move ponteiro do arquivo | fseek(arq, pos, SEEK_SET) |
fgets | Lê linha do arquivo | fgets(linha, ...) |
fputs | Grava string no arquivo | fputs(linha, arq) |
Conclusão
A alternativa A é a única que combina corretamente:
- Modo de abertura adequado (
r+). - Uso correto de
ftell para guardar a posição. - Uso correto de
fseek para retornar à posição. - Uso correto de
fputs para gravar a string modificada.
As outras alternativas falham em pontos cruciais: a B usa fputc (errado para strings), a C usa w+ (apagaria o arquivo), a D usa SEEK_CUR (voltaria do meio do arquivo) e a E inverte a ordem das funções.