Lee la matriz del archivo de texto y guárdala en una matriz 2D

He estado tratando de almacenar una entrada de matriz en un archivo de texto en una matriz, pero me muestra una salida peculiar. Este es el código:

#include  int main() { int c, i, j, row, col, nl, cr; row = col = nl = cr = 0; FILE *fp = fopen("g.txt", "r"); // Figure out how many rows and columns the text file has while ((c = getc(fp)) != EOF) { if (c == '\n') nl++; if (c == '\r') cr++; col++; if (c == '\n') row++; putchar(c); } col = (col - (nl + cr)); col = (int) (col/row); // printf("\nnumber of rows is %d\n", row); // read letters into array char array[row][col]; if ( fp ) { for ( ;; ) { c = getc(fp); if ( c == EOF ) { break; } if ( c != '\n' && c != '\r' ) { array[i][j] = c; if ( ++j >= col ) { j = 0; if ( ++i >= row ) { break; } } } } fclose(fp); } for ( i = 0; i < row; i++ ) { for ( j = 0; j < col; j++ ) { putchar( array[i][j]); } putchar('\n'); } return 0; } 

Ejemplo del archivo de datos:

 255 50 9 50 1 50 50 1 50 255 50 50 50 50 50 50 50 50 255 50 50 50 50 50 8 50 50 255 50 50 50 50 50 50 50 50 255 50 50 50 50 50 50 50 50 255 50 50 1 50 50 50 50 50 255 50 2 50 50 50 50 50 50 255 

Mi progtwig me muestra esta salida:

 255 50 9 50 1 50 50 1 50 255 50 50 50 50 50 50 50 50 255 50 50 50 50 50 8 50 50 255 50 50 50 50 50 50 50 50 255 50 50 50 50 50 50 50 50 255 50 50 1 50 50 50 50 50 255 50 2 50 50 50 50 50 50 255 $■( 1gÍuáþ09■ ı¤ıu"ÒávD ê$[ ► ð²( ♥ l ► ■ ê$[ ♥ l ²( O»ƒv[ 4■( Qõá v♥ #õáv┬²║Oÿ|®v ñ|®ve┬ív ■( x■( ÿ|®v Ó²⌂ @■( áƒv╚♀[ L ■( w¯ƒv‼ ê■( I┴ávÿ|®v↓┴áv~²║O Ó²⌂ \■( ■ ─ ( e┬ívÍ┬29►☺ 

para el archivo de entrada que se muestra, pero el problema es para la salida de matriz. No entiendo por qué me muestran estos caracteres.

El comentario de Michael es correcto, me sorprendería si eso comstack. Tendrá que asignar su matriz dinámicamente, así:

 char **array = malloc(sizeof(char *) * row) 

Y cada fila como:

array[c] = malloc(sizeof(char) * col)

Tendrás que liberar cada fila y la matriz de forma gratuita también.

También parece que está intentando leer y almacenar valores enteros. Tenga en cuenta que cuando consiga este trabajo, tendrá que convertir los valores de los caracteres, si ese es el caso.

Qué tal esto:-

 #include  void main() { FILE *fopen(), *fp; char c; int i=0,j=0; char file[50][50]; fp = fopen("abc.txt","r"); c = getc(fp) ; while (c!= EOF) { file[i][j]=c; j++; c = getc(fp); if(j==50){ i++; j=0; } } fclose(fp); }