Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ printf和fprintf的不同结果_C++_Unix_Printf - Fatal编程技术网

C++ printf和fprintf的不同结果

C++ printf和fprintf的不同结果,c++,unix,printf,C++,Unix,Printf,我需要打印“word=n”(其中[0..10]中的n)的函数,以便使用linux函数ssize\u t write(intfd,const void*buf,size\u t count)进行流式处理。试图使用fprintf,但它给出了奇怪的结果:程序打印大约1%的调用“woword=n”,而length例如“woword=7”是7。好的。我做错了什么还是这是包 if ((id_result = open( out , O_WRONLY)) <= 0) { fprintf(

我需要打印“word=n”(其中[0..10]中的n)的函数,以便使用linux函数
ssize\u t write(intfd,const void*buf,size\u t count)进行流式处理。试图使用fprintf,但它给出了奇怪的结果:程序打印大约1%的调用“woword=n”,而
length
例如“woword=7”是7。好的。我做错了什么还是这是包

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"); 
      }
    }
使用这段代码,我仍然有相同的错误




aa help me:)

如果您正在插入对
printf
(或
write
)和
fprintf(stderr,…)
的调用,则输出不一定按顺序进行。缓冲正在进行,实际输出可能不会在行尾字符处切换。

如果您在调用
printf
(或
write
)和
fprintf(stderr,…)
之间穿插,则输出不一定会按顺序进行。缓冲正在进行,实际输出可能不会在行尾字符处切换。

如果您在调用
printf
(或
write
)和
fprintf(stderr,…)
之间穿插,则输出不一定会按顺序进行。缓冲正在进行,实际输出可能不会在行尾字符处切换。

如果您在调用
printf
(或
write
)和
fprintf(stderr,…)
之间穿插,则输出不一定会按顺序进行。有缓冲区,实际输出可能不会在行尾字符上切换。

如果C++使用字符串、流、文件等类,那么C++代码看起来很像C.。也不是您必然会遇到的任何问题。无需在字符串末尾添加
\0
,编译器会自动添加它。您正在混合行缓冲和非行缓冲I/O。问题不在“\0”中。我能用C++打印到管道吗?Paul你能解释一下吗?)注释与问题无关,我只是指出它是多余的。我不确定我理解你的问题的确切性质,我看不出你的代码是如何产生错误的输出,除非<>代码Buf太短。如果你使用C++的字符串、流、文件等类,你的C++代码看起来很像C.。也不是您必然会遇到的任何问题。无需在字符串末尾添加
\0
,编译器会自动添加它。您正在混合行缓冲和非行缓冲I/O。问题不在“\0”中。我能用C++打印到管道吗?Paul你能解释一下吗?)注释与问题无关,我只是指出它是多余的。我不确定我理解你的问题的确切性质,我看不出你的代码是如何产生错误的输出,除非<>代码Buf太短。如果你使用C++的字符串、流、文件等类,你的C++代码看起来很像C.。也不是您必然会遇到的任何问题。无需在字符串末尾添加
\0
,编译器会自动添加它。您正在混合行缓冲和非行缓冲I/O。问题不在“\0”中。我能用C++打印到管道吗?Paul你能解释一下吗?)注释与问题无关,我只是指出它是多余的。我不确定我理解你的问题的确切性质,我看不出你的代码是如何产生错误的输出,除非<>代码Buf太短。如果你使用C++的字符串、流、文件等类,你的C++代码看起来很像C.。也不是您必然会遇到的任何问题。无需在字符串末尾添加
\0
,编译器会自动添加它。您正在混合行缓冲和非行缓冲I/O。问题不在“\0”中。我能用C++打印到管道吗?Paul你能解释一下吗?)注释与问题无关,我只是指出它是多余的。我不确定我是否理解您的问题的确切性质,我看不出您的代码如何产生不正确的输出,除非
buf
太短。我以为
stdout
stderr
通常使用相同的缓冲区,并保持同步。但我添加了fprintf以调试错误:/n没有fprintf,我仍然有相同的缓冲区error@RSahu怎么可能呢?他们可能会被重定向到不同的地方。我以为
stdout
stderr
通常使用相同的缓冲区,并保持同步。但我添加了fprintf以调试错误:/n没有fprintf,我仍然有相同的缓冲区error@RSahu怎么可能呢?他们可能会被重定向到不同的地方。我以为
stdout
stderr
通常使用相同的缓冲区,并保持同步。但我添加了fprintf以调试错误:/n没有fprintf,我仍然有相同的缓冲区error@RSahu怎么可能呢?他们可能会被重定向到不同的地方。我以为
stdout
stderr
通常使用相同的缓冲区,并保持同步。但我添加了fprintf以调试错误:/n没有fprintf,我仍然有相同的缓冲区error@RSahu怎么可能呢?它们可能被重定向到不同的地方。
int length = sprintf( buf, "word=%i", probability );
int result = write( id_result, buf, length );
write( id_result, "\n", 1 );