精华内容
下载资源
问答
  • c++中的printf和fprintf

    千次阅读 2018-08-24 16:54:57
    printf是对fprintf的另一层包含使用,printf其实就是fprintf的第一个参数设置为stdout。 printf默认了操作的文件为标准输出文件stdout,而fprintf可以指定第一个参数为操作的文件, 这个文件标准输出设备(屏幕)...

    printf("%s",stringVar) <===>fprintf(stdout,"%s",stringVar)

    printf是对fprintf的另一层包含使用,printf其实就是fprintf的第一个参数设置为stdout。

    printf默认了操作的文件为标准输出文件stdout,而fprintf可以指定第一个参数为操作的文件,

    这个文件和标准输出设备(屏幕)建立了某种关联,当数据写到这个文件里面的时候,屏幕就会通过既定的方式把你写进去的东西显示出来

    展开全文
  • printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。 int printf( const char *format [, argument]......fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针F.
    1. printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。
      int printf( const char *format [, argument]... );
    2. sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。
      int sprintf( char *buffer, const char *format [, argument] ... );
    3. fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。
      int fprintf( FILE *stream, const char *format, [ argument ]...);
      成功就返回输入的字节数,失败就返回eof;
      stdout – 标准输出设备 (printf("…")) 同 stdout。
      stderr – 标准错误输出设备 两者默认向屏幕输出。
      但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。

    C语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称为文本(text)文件,它的每个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。
    特别在并行中,这几个输入要区别。printf(“hello”)在mpi并行中会一次性执行结果为hellohello,而fprintf(stderr,“hello world”)有时输出会错乱。比如出现结果为hheellololwwororlldd.

    展开全文
  • printf和fprintf及用freopen()进行重定向

    千次阅读 2018-11-21 18:42:00
    不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一点的fprintf()函数,因为它更方便我们之后重定向错误输出信息到指定的设备。fpri...

    http://blog.chinaunix.net/uid-20321537-id-5606529.html

    除了人工的分析之外,最简单最直接的调试方法要算printf了。不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一点的fprintf()函数,因为它更方便我们之后重定向错误输出信息到指定的设备。fprintf()函数的原型如下:

    int fprintf(FILE *stream, const char *format, ...)

    可 以看到,它与printf()函数相比多出来了第一个参数FILE *stream,其意义是将打印的内容输出到文件流指针stream指向的流。所谓流,通常是指程序输入或输出的一个连续的字节序列,设备(例如鼠标、键 盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的,在C语言中,所有的流均以文件的形式出现——不一定是物理磁盘文件,还可以是对应于 某个输入/输出源的逻辑文件。C语言提供了5种标准的流,你的程序在任何时候都可以使用它们,并且不必打开或关闭它们。以下列出了这5种标准的流。
    ------------------------------------------------
        名称          描  述             例  子
    ------------------------------------------------
        stdin        标准输入             键盘
        stdout       标准输出             屏幕
        stderr       标准错误              屏幕
        stdprn       标准打印机          LPT1端口
        stdaux       标准串行设备       COM1端口
    ------------------------------------------------
        其中,stdprn和stdaux并不总是预先定义好的,因为LPT1和COM1端口在某些操作系统中是没有意义的,而stdin,stdout 和stderr总是预先定义好的。此外,stdin并不一定来自键盘,stdout也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。我 们在头文件stdio.h中可以找到stdin,stdout 和stderr的定义如下:

    /* Standard streams.  */

    extern struct _IO_FILE *stdin;      /* Standard input stream.  */

    extern struct _IO_FILE *stdout;     /* Standard output stream.  */

    extern struct _IO_FILE *stderr;     /* Standard error output stream.  */

     

    在 使用fprintf()函数时,通常我们可以将第一个参数设为stdout或者stderr,打印出错调试信息的时候则推荐使用stderr而不是 stdout,这是一种惯例,同时也由于内核在处理stdout和stderr时的优先级不一样,后者的优先级要高一些,因此有时候如果程序异常退出 时,stderr能得到输出,而stdout就不行。

    printf(...) 实际上相当于fprintf(stdout, ...),这也是为什么我们不推荐使用它的原因。在输出调试信息的时候,我们推荐使用fprintf(stderr, …),或者使用某个指定的文件流fprintf(some_stream, …)。

    那么具体如何在必要的时候重定向fprintf()中的调试信息呢?来看看下面的一些方法:

    当调试信息的量比较大,需要一些时间或者其他辅助工具来搜索过滤时,仅仅利用显示屏幕来输出调试信息是不够的,这时我们经常将这些信息输出到所谓的日志文件(log)中,之后再仔细的分析log文件来发现问题。

    ?       利用Shell的I/O重定向

    简单的写log方法可以通过shell的I/O重定向机制来实现,比如下面的代码:

         1  #include

         2

         3  int main()

         4  {

         5      fprintf(stdout, "This is a standard output info!\n");

         6      fprintf(stderr, "This is a standard error output info!\n");

         7      return 0;

         8  }

     

    在默认条件下,编译运行的结果是打印信息都输出在屏幕上:

    $ gcc fprint.c -o fprint

    $ ./fprint

    This is a standard output info!

    This is a standard error output info!

    这是因为默认情况下,shell所打开的stdout和stderr设备都是显示屏幕。不过我们可以通过shell的重定向功能来将打印信息写到文件中去。比如:

    $ ./fprint >output.log

    This is a standard error output info!

    $ cat output.log

    This is a standard output info!

    这样,我们把stdout的输出写到了文件output.log中,不过stderr的输出还是在屏幕上。如何重定向stderr呢?这需要用到shell定义的文件描述符。在shell下stdin, stdout, 和stderr的文件描述符分别是0, 1和2,我们可以用下面的方法重定向:

    $ ./fprint >output.log 2>error.log

    $ cat output.log

    This is a standard output info!

    $ cat error.log

    This is a standard error output info!

    $

    $ ./fprint >output.log 2>&1

    $ cat output.log

    This is a standard error output info!

    This is a standard output info!

    其中./fprint >output.log 2>error.log分别将stdout和stderr的输出写入到文件output.log和error.log中,而./fprint >output.log 2>&1则表示将stderr的输出追加到stdout的文件output.log中(结果是output.log中既有stdout输出也有stderr输出)。

    一些常用的shell I/O语法如下:

    cmd > file  把 stdout 重定向到 file 文件中 
    cmd >> file  把 stdout 重定向到 file 文件中(追加) 
    cmd 1> fiel  把 stdout 重定向到 file 文件中 
    cmd > file 2>&1  把 stdout 和 stderr 一起重定向到 file 文件中 
    cmd 2> file  把 stderr 重定向到 file 文件中 
    cmd 2>> file  把 stderr 重定向到 file 文件中(追加) 
    cmd >> file 2>&1  把 stderr 和 stderr 一起重定向到 file 文件中(追加)

    在平时的简单调试中,我们可以灵活利用这些方法来快速得到log文件。

     

    ?       用freopen()进行重定向

    有时候我们要求在程序中能够控制标准流的重定向,这时可以利用标准C库函数freopen()。freopen()的函数原型如下:

    FILE *freopen(const char *filename, const char *mode, FILE *stream)

     

    下面的代码用来测试用函数freopen()重定向stderr:

         1  #include

         2

         3  int main()

         4  {

         5      if (freopen("err.log", "w", stderr)==NULL)

         6          fprintf(stderr, "error redirecting stderr\n");

         7      fprintf(stdout, "This is a standard output info!\n");

         8      fprintf(stderr, "This is a standard error output info!\n");

         9      fclose(stderr);

        10      return 0;

        11  }

    在第5行我们用freopen()函数将stderr重定向到了”err.log”文件,这样得到的结果如下:

    $ gcc print_log.c -o print_log

    $ ./print_log

    This is a standard output info!

    $ cat err.log

    This is a standard error output info!

    可见第8行打印到stderr的信息被重定向到了err.log文件中,而第7行stdout的打印信息则还是输出到了屏幕上。

    展开全文
  • 嵌入式调试方法——printf和fprintf

    千次阅读 2011-07-24 12:10:15
    除了人工的分析之外,最简单...不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一点的fprintf()函数,因为它更方便我们之后重定向错误输出信息到指定的设备。
     
    

    除了人工的分析之外,最简单最直接的调试方法要算printf了。不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一点的fprintf()函数,因为它更方便我们之后重定向错误输出信息到指定的设备。fprintf()函数的原型如下:

    int fprintf(FILE *stream, const char *format, ...)

    可以看到,它与printf()函数相比多出来了第一个参数FILE *stream,其意义是将打印的内容输出到文件流指针stream指向的流。所谓流,通常是指程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的,在C语言中,所有的流均以文件的形式出现——不一定是物理磁盘文件,还可以是对应于某个输入/输出源的逻辑文件。C语言提供了5种标准的流,你的程序在任何时候都可以使用它们,并且不必打开或关闭它们。以下列出了这5种标准的流。
    ------------------------------------------------
        名称          描  述             例  子
    ------------------------------------------------
        stdin        标准输入             键盘
        stdout       标准输出             屏幕
        stderr       标准错误              屏幕
        stdprn       标准打印机          LPT1端口
        stdaux       标准串行设备       COM1端口
    ------------------------------------------------
        其中,stdprn和stdaux并不总是预先定义好的,因为LPT1和COM1端口在某些操作系统中是没有意义的,而stdin,stdout 和stderr总是预先定义好的。此外,stdin并不一定来自键盘,stdout也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。我们在头文件stdio.h中可以找到stdin,stdout 和stderr的定义如下:

    /* Standard streams.  */

    extern struct _IO_FILE *stdin;      /* Standard input stream.  */

    extern struct _IO_FILE *stdout;     /* Standard output stream.  */

    extern struct _IO_FILE *stderr;     /* Standard error output stream.  */

     

    在使用fprintf()函数时,通常我们可以将第一个参数设为stdout或者stderr,打印出错调试信息的时候则推荐使用stderr而不是stdout,这是一种惯例,同时也由于内核在处理stdout和stderr时的优先级不一样,后者的优先级要高一些,因此有时候如果程序异常退出时,stderr能得到输出,而stdout就不行。

    printf(...) 实际上相当于fprintf(stdout, ...),这也是为什么我们不推荐使用它的原因。在输出调试信息的时候,我们推荐使用fprintf(stderr, …),或者使用某个指定的文件流fprintf(some_stream, …)。

    那么具体如何在必要的时候重定向fprintf()中的调试信息呢?来看看下面的一些方法:

    当调试信息的量比较大,需要一些时间或者其他辅助工具来搜索过滤时,仅仅利用显示屏幕来输出调试信息是不够的,这时我们经常将这些信息输出到所谓的日志文件(log)中,之后再仔细的分析log文件来发现问题。

    Ø       利用ShellI/O重定向

    简单的写log方法可以通过shellI/O重定向机制来实现,比如下面的代码:

         1  #include <stdio.h>

         2

         3  int main()

         4  {

         5      fprintf(stdout, "This is a standard output info!\n");

         6      fprintf(stderr, "This is a standard error output info!\n");

         7      return 0;

         8  }

     

    在默认条件下,编译运行的结果是打印信息都输出在屏幕上:

    $ gcc fprint.c -o fprint

    $ ./fprint

    This is a standard output info!

    This is a standard error output info!

    这是因为默认情况下,shell所打开的stdoutstderr设备都是显示屏幕。不过我们可以通过shell的重定向功能来将打印信息写到文件中去。比如:

    $ ./fprint >output.log

    This is a standard error output info!

    $ cat output.log

    This is a standard output info!

    这样,我们把stdout的输出写到了文件output.log中,不过stderr的输出还是在屏幕上。如何重定向stderr呢?这需要用到shell定义的文件描述符。在shellstdin, stdout, stderr的文件描述符分别是0, 12,我们可以用下面的方法重定向:

    $ ./fprint >output.log 2>error.log

    $ cat output.log

    This is a standard output info!

    $ cat error.log

    This is a standard error output info!

    $

    $ ./fprint >output.log 2>&1

    $ cat output.log

    This is a standard error output info!

    This is a standard output info!

    其中./fprint >output.log 2>error.log分别将stdoutstderr的输出写入到文件output.logerror.log中,而./fprint >output.log 2>&1则表示将stderr的输出追加到stdout的文件output.log中(结果是output.log中既有stdout输出也有stderr输出)。

    一些常用的shell I/O语法如下:

    cmd > file   stdout 重定向到 file 文件中
    cmd >> file  
    stdout 重定向到 file 文件中(追加)
    cmd 1> fiel  
    stdout 重定向到 file 文件中
    cmd > file 2>&1  
    stdout stderr 一起重定向到 file 文件中
    cmd 2> file  
    stderr 重定向到 file 文件中
    cmd 2>> file  
    stderr 重定向到 file 文件中(追加)
    cmd >> file 2>&1  
    stderr stderr 一起重定向到 file 文件中(追加)

    在平时的简单调试中,我们可以灵活利用这些方法来快速得到log文件。

     

    Ø       freopen()进行重定向

    有时候我们要求在程序中能够控制标准流的重定向,这时可以利用标准C库函数freopen()freopen()的函数原型如下:

    FILE *freopen(const char *filename, const char *mode, FILE *stream)

     

    下面的代码用来测试用函数freopen()重定向stderr

         1  #include <stdio.h>

         2

         3  int main()

         4  {

         5      if (freopen("err.log", "w", stderr)==NULL)

         6          fprintf(stderr, "error redirecting stderr\n");

         7      fprintf(stdout, "This is a standard output info!\n");

         8      fprintf(stderr, "This is a standard error output info!\n");

         9      fclose(stderr);

        10      return 0;

        11  }

    在第5行我们用freopen()函数将stderr重定向到了”err.log”文件,这样得到的结果如下:

    $ gcc print_log.c -o print_log

    $ ./print_log

    This is a standard output info!

    $ cat err.log

    This is a standard error output info!

    可见第8行打印到stderr的信息被重定向到了err.log文件中,而第7行stdout的打印信息则还是输出到了屏幕上。

    展开全文
  • printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)其它参数中. 字符串format(格式)由两类项目组成 - 显示到屏幕上的字符定义printf()显示的其它参数. 基本上, 你可以指定一个包含文本在内的...
  • http://www.eefocus.com/article/09-04/71626s.html
  • Printffprintf和sprin

    2014-05-24 22:29:07
    Printffprintf和sprintf其实就是把组织好的数据保存到特定的地方,如printf就是把参数里面的数据组织好后输出到显示器上面。而fprintf则是把组织好的数据输出到标准的输入、输出以及出错上面,就是fprintf函数里的...
  • printffprintf

    2014-06-29 13:55:28
    printffprintf函数的区别? printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出...
  • C中的printffprintfsprintf fprintf向文件输出 sprintf向字符串(buffer)输出 fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组 printf是标准...
  • printf sprintf fprintf

    2015-12-06 12:04:00
    printf、sprintf与fprintf 的用法区分1.printf标准输出文件(stdout)关联的,fprintf 则没有这个限制.2.fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);...
  • 带背景颜色字体颜色的 printf/fprintf 打印
  • 文章目录写在前面的话printffprintf、sprintf函数 写在前面的话 文档没有任何商业因素,本着共享的精神进行分享,如有素材侵权,请给我留言; 文档都是自己平时看书或工作中的笔记,观点错误的地方欢迎留言; ...
  • printffprintf变参函数封装

    千次阅读 2011-09-26 17:35:11
    WINCE下开发的时候,为了方便调试...我们首先想到的的直接调用printf和fprintf输出调试信息写文件。但这样存在的弊端是不利于编译控制,因为在出版本的时候我们一般是不需要输出或生成这些调试信息的,这就需要能够方
  • 下面浅谈printf,fprintf,sprintf三个函数的使用区别 scanf、fscanf、sscanf三个函数的用法区别传送门 函数参数 三个函数头文件都是stdio.h 显然 fprintf只比printff多了一个FILE的指针 sprintf只比printf多...
  • printf,fprintf,dprintf,sprintf,snprintf 区别笔记 文章目录printf,fprintf,dprintf,sprintf,snprintf 区别笔记函数原型printffprintfdprintfsprintfsnprintfvprintfvfprintfvdprintfvsprintfvsnprintf 写过多少次 ...
  • printffprintf函数的区别

    千次阅读 2013-10-12 17:35:12
    printffprintf函数的区别? printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出...
  • 都是把格式好的字符串输出,只是输出的目标不一样: 1 printf,是把格式字符串...3 fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。 fprintf传送格式化输出到一个文件中...
  • printffprintf、sprintf区别

    千次阅读 2018-06-20 21:32:10
    printffprintf、sprintf区别printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为: printf("&lt;格式化字符串&gt;", &lt;参量表&gt;)。...
  • int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const ch
  • printffprintf、dprintf、sprintf、snprintf均是格式化输出原型如下:printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion#include <stdio.h>int printf...
  • printffprintf函数的区别

    千次阅读 2012-12-08 13:11:25
    printffprintf函数的区别  printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出 而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上  printf是有缓冲的输出,...
  • printffprintf、dprintf、sprintf、snprintf均是格式化输出 原型 #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int dprintf(int fd, ...
  • 先区分一下:printf,sprintf,fprintf。 1,printf就是标准输出,在屏幕上打印出一段字符串来。 2,sprintf就是把格式化的数据写入到某个字符串中。返回值字符串的长度。 3,fprintf是用于文件操作。 ...
  • 1、fprintf(fp, “%d”, buffer); 是将格式化的数据写入文件 fprintf(文件指针,格式字符串,输出表列); fwrite(&buffer, sizeof(int), 1, fp);是以二进位位方式写入文件 fwrite(数据,数据类型大小(字节数),...
  • printf/fprintf 打印颜色

    千次阅读 2012-12-13 22:43:32
    在调试程序时,有时候要输出大量数据,如果让 printf/fprintf 改变输出数据的颜色,那观察数据就方便多了. 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,具体的语言无关. 转义序列是以 ESC 开头...
  • printffprintf函数的区别? printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出,...
  • 1: fprintf() #include <stdio.h> int fprintf( FILE *stream, const char *format, ... ); fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,805
精华内容 31,122
关键字:

printf和fprintf