Некоторые проблемы:
Сначала вы хотите строку:
line = (char*)malloc(sizeof(char));
Это эквивалентно выделению одного байта - sizeof(char)
- и сохранению его адреса в line
. Может быть, вы хотите получить буфер больше , чтобы получить некоторые символы из файла.
Один из способов сделать это - определить постоянный размер:
#define BUFFER_SIZE 256
line = (char *)malloc(sizeof(char) * BUFFER_SIZE);
После того, как вы запустите счетчик, пока.
while(fgets(line,sizeof(line),file))
также неверно, потому что вы хотите прочитать не более sizeof(line)
байтов, что эквивалентно sizeof(char *)
. Это 32 или 64 бита в зависимости от архитектуры вашей системы.
Вы хотите прочитать как можно больший размер буфера, что означает, что вы хотите прочитать не более BUFFER_SIZE
символов. Так что лучше сделать:
while(fgets(line,sizeof(char) * BUFFER_SIZE, file))
{
/* do stuff */
}
Это предупреждение: использование fgets
опасно . Если вы хотите получить байты из файла, а также посчитать их, вы можете использовать fread
, например:
size_t tmp;
while(tmp = fread(line, sizeof(char), BUFFER_SIZE, file))
{
count += tmp;
/* do stuff on line */
}
Но если вы хотите узнать только размер вашего файла, проверьте этот другой пост .