C: невозможно распечатать из файла

Итак, у меня есть этот проект, в котором мне нужно открыть файл и распечатать содержимое на C, но я должен использовать системные вызовы Unix. Однако я не понимаю, почему ничего не печатает. Я пытаюсь запустить код, но он, кажется, сразу переходит к ошибке закрытия. Я знаю, что мне нужен unistd.h, я уже включил это.

#define MAXBUF 4096
int main(int argc, char* argv[]){
int x = 0, y, z = 1, a;         //x: Counter, Y:int for open, z:another counter, a:int for read
char buff[MAXBUF];              //set buffer size
int fe,fn,ft;                   //fe = found E, fn = found n, ft = found T
if((y = open( argv[2], O_RDONLY )) == -1){
    errHandler("Couldn't open ", argv[2]);
    }
            .
            .
            .

if(fn  == 1){                                   //if fn returned true
    printf("%d ", z++);
    }

while( ( a = read( y, buff, MAXBUF ) ) > 0 ){           

    if ( buff == '\n' && fe && fn )        //<--
        printf("$\n%4d:  ", z++ );
    else if ( buff == '\n' && fe )
        printf("\n");                      //Flags for various options
    else if ( buff == '\t' && ft )         
        printf("^T");
    else if ( buff == '\n' && fn )
        printf("\n%4d:  ", z++ );          //<--
    else
        printf("%c", buff);
}
close(y);
if ( close( y ) == -1)
    printf("Unable to close file");
return 0;
}

редактировать: вот декларации. "." пропускаем код, который просто устанавливает флаги.

1 ответ

Решение

В вашем:

if ( buff == '\n' && fe && fn )        //<--

Я предполагаю, что вы хотите проверить, была ли прочитана пустая строка, сравнив ее с символом новой строки. Тем не мение, buff это не персонаж; это указатель на то, где хранятся все прочитанные символы. Чтобы проверить, если первый символ buff символ перевода строки, используйте:

if ( *buff == '\n' && fe && fn )        //<--

* разыменовывает указатель и дает вам первый символ. То же самое для других ваших проверок. Если эти проверки не пройдены, выведите строку:

else
    printf("%s", buff);

Обратите внимание на символ форматирования %sне %c, чтобы вывести строку (буфер) вместо одного символа.

Другие вопросы по тегам