Как добавить строки, используя sprintf? - PullRequest
56 голосов
/ 20 апреля 2010

У меня серьезная проблема с sprintf.

Предположим, мой фрагмент кода:

sprintf(Buffer,"Hello World");
sprintf(Buffer,"Good Morning");
sprintf(Buffer,"Good Afternoon");
.
.
.

Несколько сотен спринтов ....

Если мне так нравится, это перезаписывается.

Как мне избежать перезаписи с помощью sprintf. Если я дам printf в конце, я хочу увидеть все строки.

Ответы [ 15 ]

1 голос
/ 18 мая 2013

Вы можете использовать простую строку, показанную ниже, чтобы добавить строки в один буфер:

sprintf(Buffer,"%s %s %s","Hello World","Good Morning","Good Afternoon");
0 голосов
/ 31 июля 2018

Пример небольшого полного кода

Использование плоского простого stdio только стандартная библиотека

#include <stdio.h>
int main()
    {
    char c[1024];
    int  i=0;

    i+=sprintf(c+i,"We "   );
    i+=sprintf(c+i,"Love " );
       sprintf(c+i,"Coding");

    printf("%s",c);
    }

ВЫХОД: We Love Coding

0 голосов
/ 14 августа 2017

Я пишу функцию поддержки динамической переменной string append, например, PHP str append: str. ул. ... и т. д.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

int str_append(char **json, const char *format, ...)
{
    char *str = NULL;
    char *old_json = NULL, *new_json = NULL;

    va_list arg_ptr;
    va_start(arg_ptr, format);
    vasprintf(&str, format, arg_ptr);

    // save old json
    asprintf(&old_json, "%s", (*json == NULL ? "" : *json));

    // calloc new json memory
    new_json = (char *)calloc(strlen(old_json) + strlen(str) + 1, sizeof(char));

    strcat(new_json, old_json);
    strcat(new_json, str);

    if (*json) free(*json);
    *json = new_json;

    free(old_json);
    free(str);

    return 0;
}

int main(int argc, char *argv[])
{
    char *json = NULL;

    /*
    str_append(&json, "name: %d, %d, %d", 1, 2, 3);
    str_append(&json, "sex: %s", "male");
    str_append(&json, "end");
    str_append(&json, "");
    str_append(&json, "{\"ret\":true}");
    */

    int i;
    for (i = 0; i < 100; i++) {
        str_append(&json, "id-%d", i);
    }

    printf("%s\n", json);

    if (json) free(json);

    return 0;
}
0 голосов
/ 17 февраля 2017

Использование strcat (buffer, "Your new string...here") в качестве опции.

0 голосов
/ 20 апреля 2010

Как насчет:

char s[100] = "";

sprintf(s, "%s%s", s, "s1");

sprintf(s, "%s%s", s, "s2");

sprintf(s, "%s%s", s, "s3");

printf("%s", s);

Но учтите возможные переполнения буфера!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...