C: 无法从文件打印
C: unable to print from file
所以我有这个项目,我需要打开一个文件并打印 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;
}
编辑:这是声明。这 '。'正在跳过只是设置标志的代码。
在你的:
if ( buff == '\n' && fe && fn ) //<--
我假设您想通过检查换行符来检查是否读取了空行。但是,buff
不是字符;它是一个指针,指向是否存储了所有读取的字符。要检查 buff
的第一个字符是否为换行符,请使用:
if ( *buff == '\n' && fe && fn ) //<--
*
取消引用指针并为您提供第一个字符。其他支票也一样。如果这些检查失败,则打印行:
else
printf("%s", buff);
注意格式化字符 %s
,而不是 %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;
}
编辑:这是声明。这 '。'正在跳过只是设置标志的代码。
在你的:
if ( buff == '\n' && fe && fn ) //<--
我假设您想通过检查换行符来检查是否读取了空行。但是,buff
不是字符;它是一个指针,指向是否存储了所有读取的字符。要检查 buff
的第一个字符是否为换行符,请使用:
if ( *buff == '\n' && fe && fn ) //<--
*
取消引用指针并为您提供第一个字符。其他支票也一样。如果这些检查失败,则打印行:
else
printf("%s", buff);
注意格式化字符 %s
,而不是 %c
,以打印字符串(缓冲区)而不是单个字符。