如何在sprintf()中获得追加模式

Jee*_*tel 4 c string printf

看到这段代码:

int main() {
    char a[50];
    FILE *fp;

    fp = fopen("test1.txt", "w");

    sprintf(a,"jigar %d \n", 3);
    fprintf(fp,"jigar %d \n", 3);

    sprintf(a,"patel %d \n", 2);
    fprintf(fp,"patel %d \n", 2);
    printf("%s", a);
}
Run Code Online (Sandbox Code Playgroud)

在这里,使用fprintf,我可以写入文件

jigar 3 
patel 2 
Run Code Online (Sandbox Code Playgroud)

我想要的相同功能在哪里我打印在一个char缓冲区.

但使用sprintf给我缓冲

patel 2 
Run Code Online (Sandbox Code Playgroud)

我有这么多这样的打印,我想在一个char缓冲区中添加,然后我需要将它返回给应用程序,以便如何以最简单和最快的方式获取它?

pmg*_*pmg 22

sprintf() 返回打印的字符数.

只需使用该号码进行下一次写入......

int i;
char a[50];
char *ap = a;

for (i = 5; i < 15; i++) {
    ap += sprintf(ap, "%d ", i);
}

printf("%s\n", a); /* "5 6 7 8 9 10 11 12 13 14 " */
Run Code Online (Sandbox Code Playgroud)

确保不会导致任何缓冲区溢出.

  • @FolkertvanHeusden,基本上是一个很好的建议,但有一些错误.你不增加`ap`,sizeof(`ap`)是没有意义的,一旦偏移变得太大你就会给'snprintf`一个负的大小.更好的是`offset + = snprintf(ap + offset,sizeof(a)> offset?sizeof(a)-offset:0,...);`. (2认同)