разные результаты с printf и fprintf

0

Мне нужна функция, которая печатает "word = n" (где n в [0..10]) для потока с использованием функции linux ssize_t write(int fd, const void *buf, size_t count); , Пытаясь использовать fprintf, но он дает странные результаты: программа печатает в ~ 1% вызовов "woword = n", а length например "woword = 7", равна 7. Printf print all right. Я делаю что-то неправильно или это сумка?

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) с использованием '\ 0' и '\n' в fprintf

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

с этим кодом у меня все же есть те же ошибки

аа помоги мне :))

  • 1
    Ваш код C ++ очень похож на C. Если бы вы использовали классы C ++ для строк, потоков, файлов и т. Д., У вас, вероятно, не было бы этой проблемы. Ни о множестве проблем, с которыми вам придется столкнуться.
  • 1
    Не нужно ставить \0 в конце ваших строк, компилятор добавляет его автоматически.
Показать ещё 6 комментариев
Теги:
printf

1 ответ

3

Если вы вставляете вызовы на printf (или write) и fprintf(stderr,...) вывод не обязательно будет выполнен в порядке. Буферизация продолжается, и фактический вывод, вероятно, не переключается на символ конца строки.

  • 0
    Хм. Я думал, что stdout и stderr обычно используют один и тот же буфер и остаются синхронизированными.
  • 0
    Но я добавил fprintf к ошибке отладки: / Без fprintf у меня все еще та же ошибка
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню