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
, чтобы вывести строку (буфер) вместо одного символа.