2

intento leer una matriz desde un archivo .txt. En este texto debe estar la matriz dispuesta tal como el siguiente ejemplo:

3 4
2 1 3 4
5 2 6 7
2 1 4 5

donde 3 es el numero de filas, 4 el numero de columnas y el resto corresponde a la matriz. Sin embargo me presenta un fallo, que no se como solucionar para que me entregue la matriz almacenada como retorno, las fallas se presentan en las siguientes líneas:

cola.c:91:17: error: expected expression before 'int'
   91 |  int **matriz = int *[filas];
      |                 ^~~
cola.c:93:15: error: expected expression before 'int'
   93 |   matriz[i] = int[columnas];
      |               ^~~

A continuación el código. Gracias de antemano

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

int **leerMatriz(char *nombreArchivo){
    FILE *archivo = fopen(nombreArchivo, "r");
    if (archivo == NULL) {
        printf("Error en la apertura del archivo");
        return 0;
    }
    char linea[30];
    fgets(linea, 29, archivo); 
    char *token = strtok(linea, " ");
    int filas = atoi(token);
    token = strtok(NULL, " ");
    int columnas = atoi(token);
    int **matriz = int *[filas];
    for (int i = 0; i < filas; i++){
        matriz[i] = int[columnas];
        fgets(linea,29, archivo);
        token = strtok(linea, " ");
        matriz[i][0] = atoi(token);
        for (int j = 1; j < columnas; j++){
            token = strtok(NULL, " ");
            matriz[i][j] = atoi(token);
        }
    }
    fclose(archivo);
    return matriz;
}

1 Answers1

1

Estas dos líneas en C nunca van a compilar:

int **matriz = int *[filas];
matriz[i] = int[columnas];

Quizás querías hacer algo como esto:

int **matriz = new int *[filas];
matriz[i] = new int[columnas];

Pero esto solo funcionará en C++.

Para que no dé error de compilación lo debes hacer así:

int** matriz = malloc(filas * sizeof(int*));
matriz[i] = malloc(columnas * sizeof(int));
  • La primera línea reserva memoria para un array de N punteros.
  • La segunda línea reserva memoria para un array de M enteros.

En este hilo explico como funciona los arrays bidimensionales en C.

MrDave1999
  • 7,491
  • 1
  • 7
  • 22
  • Muchas Gracias!, esto ha solucionado mi problema, y me ha ayudado a entender mucho mas acerca del funcionamiento de los arrays bidimensionales – thecesaroswing619 Sep 01 '20 at 12:18
  • @thecesaroswing619 Una forma de agradecer, es [aceptando la respuesta](https://es.meta.stackoverflow.com/questions/427/c%C3%B3mo-funciona-la-aceptaci%C3%B3n-de-respuestas) que resolvió tu problema. – MrDave1999 Sep 01 '20 at 13:10