LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

манипуляции с va_arg к сожалению не взлетят: http://stackoverflow.com/questions/3968585/expanding-va-list-portably.

т.ч. я тоже голосую за strstr, что-то вроде:

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

void
replace(char *hay, char *needle)
{
        char *p, *q;

        p = hay = strdup(hay);

        while ((q = strstr(p, "%s"))) {
                *q = '\0';
                if (p)
                        fputs(p, stdout);
                fputs(needle, stdout);
                p = q + 2;
        }

        if (p)
                fputs(p, stdout);

        free(hay);
}

int
main()
{
        replace("%s aaa %s bbb %s ccc %s\n", "ddd");
        return 0;
}

Исходная версия beastie, :

+1

манипуляции с va_arg к сожалению не взлетят: http://stackoverflow.com/questions/3968585/expanding-va-list-portably.

т.ч. я тоже голосую за strstr, что-то вроде:

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

void
replace(char *hay, char *needle)
{
        char *p, *q;

        p = hay = strdup(hay);

        while ((q = strstr(p, "%s"))) {
                *q = '\0';
                fputs(p, stdout);
                fputs(needle, stdout);
                p = q + 2;
        }

        if (p)
                fputs(p, stdout);

        free(hay);
}

int
main()
{
        replace("%s aaa %s bbb %s ccc %s\n", "ddd");
        return 0;
}