История изменений
Исправление 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;
}