Dear All,

When I tried to print a long string using PetscPrintf() I found that it truncated the string. Attached is a simple example for this (run with single processor). I used PetscPrintf() and printf() to print the same string and the printf() seems OK. I am using petsc-3.8.4.


Best,

Rongliang

#include <stdlib.h>
#include <string.h>
#include <petsc.h>

static char help[] = "Test";

int main(int argc,char **args)
{

  PetscErrorCode ierr;
  PetscInt i, j;
  PetscInt num = 200;
  PetscInt n = 20;
  char* synccelldf;
  char piece[500];
  PetscMPIInt rank;

  ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr;
  ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);

  ierr = PetscMalloc(500*num*sizeof(char),&synccelldf);CHKERRQ(ierr);
  ierr = PetscMemzero(synccelldf, 500*num*sizeof(char));CHKERRQ(ierr);

  for (i=0; i<num; i++) {
    sprintf(piece, "[%d] %d %d %d ", rank, i, i+1, i+2);
    strcat(synccelldf, piece);
    for (j=0; j<n; j++) {
      sprintf(piece, "%d ", j);
      strcat(synccelldf, piece);
    }
    sprintf(piece, "\n");
    strcat(synccelldf, piece);
  }
  ierr = PetscPrintf(PETSC_COMM_WORLD, "PetscPrintf results: \n");CHKERRQ(ierr);
  ierr = PetscPrintf(PETSC_COMM_WORLD, "%s \n", synccelldf);CHKERRQ(ierr);
  ierr = PetscPrintf(PETSC_COMM_WORLD, "\n\nPrintf results: \n");CHKERRQ(ierr);
  printf("%s \n", synccelldf);

  ierr = PetscFinalize();
  return ierr;
}

Reply via email to