Frage

Wie kann ich Strings in einen 2D-char-Array von (zum Beispiel) eine Datei?

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

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

Das wird es nicht tun.

War es hilfreich?

Lösung

Sie mit der Temperatur entfernt, und jede Saite fällt direkt in den Raum, der Sie für sie erstellt (in buffert in diesem Fall).

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

Hier wird der Dateizeiger fp bezeichnet. Sie werden eine Reihe von Kontrollen vornehmen müssen, um die 10 möglichen Einträge in buffert zu verhindern, überfüllt, oder die 30 verfügbaren Zeichen in jedem seiner Saiten. Sie sollten auch vermeiden feof ().

Andere Tipps

Versuchen Sie folgendes:

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

Das "%29s" Formatbezeichner liest zu 29 Zeichen in buffer[i], der alle es Platz hat, ist für. Die "%*[^ \t\n]" liest und wegwirft Nicht-Leerzeichen, falls die Zeichenfolge länger als 29 Zeichen.

Darüber hinaus ist while (!feof()) { } fast immer das Falsche zu tun, weil EOF nicht auf dem Strom, bis das Ende der Datei angetroffen wird, festgelegt ist.

Stolen von diesem Forum :

#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);
} 

Eine weitere Lösung mit einem Zeiger auf Arrays anstelle von Array von Arrays IS hier.

es sieht mir nicht, wie Sie die Zeichenfolge in ein Array tatsächlich sind Kopierens. Ich bin überrascht, es kompiliert. Ich bin etwas fehlt?

Blick in strcpy oder strncpy, oder Sie können für Loops kopieren verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top