Вот только он вываливается в корочку с таким вот выводом:
root@server /usr/local/script/c++_code/openfile/#./a.out
server = freebsd2.owe
port= 3128
ip =192.168.10.114
user = skif
password=password
Ошибка сегментации (core dumped)
root@server /usr/local/script/c++_code/openfile/#
То бишь он считывает весь файл, а потом вываливается в корочку. Насколько я разобрал, проблема находиться в while (fgets(line,MAXLINE,READFILE) != NULL) — fhets по какой-то причине возвращает не NULL значение и соответственно программа ни как не реагирует на присутствие EOF, а следовательно валится в корку.
Почему такое происходит?
Или я не прав?
Здравствуйте, Анатолий Широков, Вы писали:
АШ>А где выделяется память под line?
А лучше на стек положи:
char line[MAXLINE];
Re[3]: fgets и EOF
От:
Аноним
Дата:
27.01.05 16:39
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>А где выделяется память под line?
АШ>А лучше на стек положи:
АШ>
АШ>char line[MAXLINE];
АШ>
такой вариант тоже пробовал. заканчивается аналогично.
По поводу первого, насколько я понимаю char* подразумевает под собой подобие динамческого массива.
Здравствуйте, Аноним, Вы писали:
А>Имеется несложный код:
А>Вот только он вываливается в корочку с таким вот выводом: А>root@server /usr/local/script/c++_code/openfile/#./a.out А> server = freebsd2.owe А>port= 3128 А>ip =192.168.10.114 А> user = skif А>password=password А>Ошибка сегментации (core dumped) А>root@server /usr/local/script/c++_code/openfile/#
А>То бишь он считывает весь файл, а потом вываливается в корочку. Насколько я разобрал, проблема находиться в while (fgets(line,MAXLINE,READFILE) != NULL) — fhets по какой-то причине возвращает не NULL значение и соответственно программа ни как не реагирует на присутствие EOF, а следовательно валится в корку. А>Почему такое происходит? А>Или я не прав?
У меня все работает:
// RSDN_TRY.cpp — readfile
#include "stdio.h"
#include "stdafx.h"
#include "fcntl.h"
#include "conio.h"#define MAXLINE 1024
char* readstrsk(char* line_out);
int main ()
{
const char *pathtofile = "C:/1.txt";
FILE *READFILE;
char line[MAXLINE], *outline;
char lit;
READFILE = fopen(pathtofile, "r");
/////////////////////////////////////////////////////////if (READFILE == NULL)
{
printf ("Error while openning file\n");
exit(1);
}
/////////////////////////////////////////////////////////while ( fgets(line,MAXLINE,READFILE) != NULL)
{
int leng;
leng = strlen(line);
if (leng != 1)
{
printf("%s",line);
}
}
printf("%s End of console readfile programm. A vot tut i hahahahaha ;-)\n");
fclose (READFILE);
getch();
return(0);
}
Здравствуйте, Анатолий Широков, Вы писали:
А>>По поводу первого, насколько я понимаю char* подразумевает под собой подобие динамческого массива.
АШ>Нет, это все лишь указатель на участок памяти. В вашем случае указатель в никуда, в "пропасть".
Поправьте, если я не прав — я новичок в Си, но указатель(pointer) имеет вид char *variable; , а не char* variable;
Здравствуйте, F1aSh, Вы писали:
FS>Скажу по секрету:
FS>переменная lit типа чар и указатель типа чар на outline нигде не используются.
Нет, эти переменные нужны, просто я убрал весь муссор из программы, оставил только интересующие меня моменты. Но пару переменных все же забыл.
Здравствуйте, ilejn, Вы писали:
I>Здравствуйте, swarogich, Вы писали:
S>>Поправьте, если я не прав — я новичок в Си, но указатель(pointer) имеет вид char *variable; , а не char* variable;
I>Если речь идет о пробеле, то он не важен.
Объясните, пожалуйста. получается записи вида
char* asdasd;
равносильны
char *asdasd;
Так получается? А почему тогда компилятор ругается на них по разному? точнее если я пытаюсь ппередать строку в первом случае ругани нет, а вовтором, говорит о некорректном преобразовании типов Integer или pointer
Здравствуйте, Анатолий Широков, Вы писали:
C>>>А вот это что за идея? Спецификатор формата есть, а форматируется им что?
S>>Глупо, но это именно оно...
АШ>Серьезно, то есть с char *line программа нормально работала?
Здравствуйте, Skif Swarogich, Вы писали:
SS>Здравствуйте, Анатолий Широков, Вы писали:
C>>>>А вот это что за идея? Спецификатор формата есть, а форматируется им что?
S>>>Глупо, но это именно оно...
АШ>>Серьезно, то есть с char *line программа нормально работала?
SS>Ага.
Поправка char* line;