C:无法从文件打印

标签 c printf unistd.h

所以我有这个项目,我需要打开一个文件并用 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:无法从文件打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33113311/

相关文章:

c - TCHAR 字符显示不正确

linux - execve函数的实现(unistd.h)

c - 未命名 block /sope 中静态存储持续时间变量的用途?

c - C中的多线程for循环

ios - 如何将 printf 输出定向到与 NSLog 相同的目标?

C sleep 功能不起作用

c - 使用 dub2() 将输出重定向到文件 : undefined reference to `dub2'

c# - 从 C# 程序的 DLL 访问方法

c - 读取单词直到 EOF

C - 为什么 printf() 中的输出如此奇怪