printf和fprintf的结果不同

时间:2015-02-11 17:17:26

标签: c++ unix printf

我需要使用linux函数ssize_t write(int fd, const void *buf, size_t count);打印“word = n”(其中[0..10]中的n)的函数。尝试使用fprintf,但它会产生奇怪的结果:程序打印约1%的调用“woword = n”,而length例如“woword = 7”则为7. Printf打印正常。我做错了什么或这是包包?

if ((id_result = open( out , O_WRONLY)) <= 0) {
        fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "could not open output\0");
        ret = P_STREAMS_LOAD_ERROR;
    } 

    void printProbability( int probability ){
      char buf[50];
      memset( buf, '\0', 50 );
      int length = sprintf( buf, "word=%i\n\0", probability );
      fprintf(stderr, "debug : word=%i len = %i\n\0", probability, length );
      int result = write( id_result, buf, length );
      if( result == -1){
        fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "error \n"); 
      }
    }

编辑:

我的理解,我们有两个理论: 1)混合printf并写入 2)在fprintf中使用'\ 0'和'\ n'

int length = sprintf( buf, "word=%i", probability );
int result = write( id_result, buf, length );
write( id_result, "\n", 1 );

使用此代码我仍然有相同的错误

aa帮帮我:))

1 个答案:

答案 0 :(得分:3)

如果您将呼叫散布到printf(或write)和fprintf(stderr, ...),则输出不一定按顺序排列。有缓冲正在进行,实际输出可能不会切换到行尾字符。