Гость Опубликовано 12 января, 2005 Жалоба Поделиться Опубликовано 12 января, 2005 Есть файл в нём: строка1 строка2 ... строка(n) надо считать их в массив строк.На Си. Поможите пожалуйста третий день сижу.... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 13 января, 2005 Жалоба Поделиться Опубликовано 13 января, 2005 #include <stdio.h> #define MAX_STR_SIZE 256 /* Максимальная длина строки */ int main() { FILE *fhandle = fopen("./filename.txt", "r"); if (!fhandle) { /* Ошибка открытия файла */ } char line[MAX_STR_SIZE]; while (!feof(fhandle)) { fgets(line, MAX_STR_SIZE, fhandle); /* В line - считанная строка */ /* ... */ } fclose(fhandle); return 0; } Или нужно в один массив все засунуть? Если да, то: а) Известно ли кол-во строк в файле по заданию? б) Если кол-во строк не известно, можно ли использовать выделение памяти "ручками"? в) Можно использовать С++? Тогда и (а) и (б) не нужно... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 13 января, 2005 Жалоба Поделиться Опубликовано 13 января, 2005 Попробуйте такое: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #define FILE_NAME "fn" int main (void) { struct stat st; int fd, lines, i, j; char *buf, **a; stat (FILE_NAME, &st); if (!st.st_size) return 1; buf = malloc (st.st_size); fd = open (FILE_NAME, O_RDONLY); read (fd, buf, st.st_size); /* Количество строк */ for (i = 0, lines = 0; i < st.st_size; i++) if (buf == '\n') lines++; a = malloc (lines); /* Распихиваем по массиву */ a [0] = buf; for (i = 0, j = 1; i < st.st_size;i++) if (buf == '\n') { a[j++] = &buf[i + 1]; buf = 0; } return 0; } FILE_NAME - имя файла, используются только системные вызовы, под Виндой вряд ли заработает Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.