Es gibt auch eine hässliche Hack, die mit Leitungs ISO-C arbeitet: Sie fopen()
verwenden können, eine Null-Datei zu öffnen (/dev/null
auf * nix, NUL
unter Windows), und stellen Sie das Array als Puffer der Datei über
setvbuf(file, buffer, _IOFBF, buffer_size)
Dies sollte gut funktionieren, solange fflush()
nicht irgendwo im Code aufgerufen wird. Außerdem muss sich der Programmierer explizit um den String-Begrenzer kümmern.
Ich sehe keine Notwendigkeit, dies zu tun: Wie snprintf()
die Anzahl der geschriebenen Zeichen zurückgibt, ist es trivial, die Position eines Puffers zu verfolgen.
Man kann sogar eine Funktion schreiben, automatisch den Pufferüberlauf, um die Größe: bufprintf.c
der Prototyp der Funktion
int bufprintf(char **buffer, size_t *size, size_t *offset,
const char *format, ...);
ist ein Beispielprogramm könnte wie folgt aussehen:
#include <stdio.h>
extern int bufprintf(char **buffer, size_t *size, size_t *offset,
const char *format, ...);
int main(void)
{
size_t size = 0; // must be set!
size_t offset;
char * buffer;
for(int i = 0; i < 100; ++i)
bufprintf(&buffer, &size, &offset, "we rock %i\n", i);
puts(buffer);
printf("size:\t%u\noffset:\t%u\n", (unsigned)size, (unsigned)offset);
}
einen Code schreiben, der veranschaulicht, was Sie tun möchten –
Denken Sie daran, dass Sie das tun können, ohne ein FILE * zu verwenden, der Rückgabewert von sprintf sagt Ihnen, wie viele Zeichen geschrieben wurden, also verwenden Sie das als Offset in den Puffer jedes Mal . – nos