Pregunta

¿Cómo pongo cadenas en una matriz de caracteres 2D desde (por ejemplo) un archivo?

char buffert[10][30];
int i = 0;

while(!feof(somefile)) {
  fscanf(somefile, "%s", temp);
  buffert[i][] = temp;
  i++;
}

Esto no lo hará.

¿Fue útil?

Solución

Elimine la temperatura y suelte cada cadena directamente en el espacio que creó para ello (en este caso, en buffert).

char buffert[10][30];
int i = 0;
FILE * fp = fopen("myfile", "r");
while(!feof(fp)) { 
  fscanf(fp, "%s", buffert[i]);
  i++;
}

Aquí el puntero del archivo se llama fp. Tendrá que hacer un montón de comprobaciones para evitar que se desborden las 10 entradas disponibles en buffert, o los 30 caracteres disponibles en cada una de sus cadenas. También debe evitar feof ().

Otros consejos

Prueba esto:

while(i < 10 && fscanf(somefile, "%29s%*[^ \t\n]", buffer[i]) != EOF) {
  i++;
}

El especificador de formato "% 29s " lee hasta 29 caracteres en buffer [i] , que es todo para lo que tiene espacio. El "% * [^ \ t \ n] " lee y desecha los espacios que no son espacios en blanco, en caso de que la cadena tenga más de 29 caracteres.

Además, while (! feof ()) {} casi siempre es algo incorrecto, porque EOF no está configurado en la transmisión hasta el final del archivo se encuentra.

Robado de este foro :

#include <stdio.h>

main()
{
  int dirsize = 80;
  char array[9][dirsize];
  int linenum = 0;
  FILE *filepointer;
  filepointer = fopen("projectfile.txt","r");
  while (feof(filepointer) == 0)
  {
    linenum++;
    fgets(array[linenum], dirsize, filepointer);
  }
  fclose(filepointer);
} 

Otra solución con un puntero a las matrices en lugar de una matriz de matrices es aquí.

no me parece que realmente estés COPIANDO la cadena en una matriz. Me sorprende que se compile. ¿Me estoy perdiendo algo?

mira en strcpy o strncpy, o puedes copiar usando for loops.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top