1
resposta

Serve como exemplo?

Eu fiz uma resolução do exercício com outro contexto. Eu criei um arquivo txt de letras e coloquei algumas letras no arquivo, como também a quantidade de linhas e colunas. Eu queria saber se esta correto o uso da alocação dinâmica com vetores bidimensionais.

letras.txt

5 3
abc
def
ghi
jkl
mno

Programa em C

#include <stdio.h>
#include <stdlib.h>

int main() {
    char** letras; // Criando um ponteiro para um array de ponteiros (matriz de strings)
    int linhas;
    int colunas;

    // Abrindo o arquivo
    FILE* f;
    f = fopen("letras.txt", "r");

    // Lendo o número de linhas e colunas a serem lidas do arquivo txt
    fscanf(f, "%d %d", &linhas, &colunas);

    // Alocando memória para o ponteiro baseado no número de linhas
    letras = malloc(sizeof(char*) * linhas);
    for (int i = 0; i < linhas; i++) {
        letras[i] = malloc(sizeof(char) * (colunas + 1)); // +1 para o caractere nulo
    }

    // Lendo cada linha como uma string
    for (int i = 0; i < linhas; i++) {
        fscanf(f, "%s", letras[i]);
    }

    // Exibindo as strings lidas
    for (int i = 0; i < linhas; i++) {
        printf("%s\n", letras[i]);
    }

    // Fechando o arquivo
    fclose(f);

    // Liberando cada espaço alocado para as strings
    for (int i = 0; i < linhas; i++) {
        free(letras[i]);
    }

    // Liberando o espaço do ponteiro que armazena os ponteiros das strings
    free(letras);
}

Terminal: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Lucas! Como vai?

Sua abordagem ficou muito interessante! O uso da alocação dinâmica para trabalhar com vetores bidimensionais está correto e bem estruturado. A leitura dos dados do arquivo também foi bem aplicada, garantindo que o programa seja flexível quanto ao tamanho da matriz.

Uma dica interessante para o futuro é usar a função fgets para ler linhas completas com espaços, caso precise capturar strings mais complexas. Veja este exemplo:


char linha[100];
fgets(linha, sizeof(linha), f);
printf("%s", linha);

Este código lê uma linha completa do arquivo e exibe no terminal.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!