don*_*lan 4 c printf mpi output-formatting
我有一个MPI进程,我需要打印到文件.MPI系统使用MPI_File_iwrite等功能命令,它接受缓冲区(例如char指针)和整数长度.然后,缓冲区将打印到文件中.
因此,为了打印我需要打印到文件的内容,我需要以某种方式用一个将格式转换映射到char*缓冲区的函数替换printf函数.这是有问题的,因为字符串的长度可能不同......例如:
printf("something %d, %d, %d, %f, etc.",x,y,z,p,d,...);
Run Code Online (Sandbox Code Playgroud)
如何恢复printf格式化生成的字符串,找出长度是多少,并将其作为char*传递给mpi函数?
看起来你想要使用snprintf足够大的缓冲区.
如果缓冲区足够大,则返回值snprintf等于打印的字符数.您可以将输出字符串的长度计算为缓冲区大小的最小值和返回值snprintf.
您可以使用"打印"0字节到NULL指针snprintf().在这种情况下,不会写入任何字符串,但snprintf()相对于其返回值仍然会正常运行.然后你可以分配一个足够大的缓冲区.
例如:
size_t len;
len = snprintf(NULL, 0, "something %d, %d, %d, %f, etc.",x,y,z,p,d,...);
if (len > 0) {
char *buf = malloc(len + 1);
snprintf(buf, len + 1, "something %d, %d, %d, %f, etc.",x,y,z,p,d,...);
}
Run Code Online (Sandbox Code Playgroud)
这仅在C99中有效.
请注意,snprintf()如果存在转换错误,则可以返回负值.只有少数情况会发生这种情况,但它们仍然存在.根据说明符,其输出也可以为零.