Помещение строк в 2D chararray в C - PullRequest
1 голос
/ 21 октября 2009

Как поместить строки в массив двумерных символов (например) из файла?

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

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

Это не будет делать.

Ответы [ 4 ]

4 голосов
/ 21 октября 2009

Попробуйте это:

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

Спецификатор формата "%29s" считывает до 29 символов в buffer[i], и это все, на что у него есть место. "%*[^ \t\n]" читает и выбрасывает непробельные символы, если длина строки превышает 29 символов.

Кроме того, while (!feof()) { } почти всегда неправильно, поскольку EOF не устанавливается в потоке до тех пор, пока не встретится конец файла.

0 голосов
/ 21 октября 2009

мне не кажется, что вы на самом деле копируете строку в массив. Я удивлен, что это компилируется. я что-то упустил?

посмотрите на strcpy или strncpy, или вы можете скопировать, используя циклы for.

0 голосов
/ 21 октября 2009

Избавьтесь от temp и поместите каждую строку прямо в пространство, которое вы для нее создали (в данном случае в буфере).

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

Здесь указатель файла называется fp. Вам нужно будет выполнить несколько проверок, чтобы предотвратить переполнение 10 записей, доступных в буфере, или 30 символов, доступных в каждой из его строк. Вам также следует избегать feof ().

0 голосов
/ 21 октября 2009

Украдено у на этом форуме :

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

Другое решение с указателем на массивы вместо массива массивов здесь.

...