#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print(char const* string, int count, ...)
{
struct data
{
char name[100];
int value;
};
int totalArgs = count;
count*=2;
va_list args;
struct data
* parameters
= (struct data
*)malloc(totalArgs
*sizeof(struct data
)); for( int i=0; i<totalArgs; i++)
{
parameters
[i
].
value = va_arg(args
, int); }
for( int i=0; string[i]!='\0'; ++i )
{
if( string[i] == '{' )
{
int replaced = 0;
int j;
for( j=i+1; string[j]!='}'; ++j );
for( int dataIndex=0; dataIndex<totalArgs; ++dataIndex )
{
if( memcmp(string
+i
+1, parameters
[dataIndex
].
name, j
-i
-1) == 0 ) {
printf("%d", parameters
[dataIndex
].
value); i=j;
replaced = 1;
break;
}
}
if( !replaced )
{
while(i<=j)
{
}
i--;
}
}
else
{
}
}
}
int main()
{
int value = 123;
print("X={X} value={value} other={other}", 2, "X", 44, "value", value);
}
I2luY2x1ZGUgPHN0ZGFyZy5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIHByaW50KGNoYXIgY29uc3QqIHN0cmluZywgaW50IGNvdW50LCAuLi4pCnsKICAgIHN0cnVjdCBkYXRhCiAgICB7CiAgICAgICAgY2hhciBuYW1lWzEwMF07CiAgICAgICAgaW50IHZhbHVlOwogICAgfTsKCiAgICBpbnQgdG90YWxBcmdzID0gY291bnQ7CiAgICBjb3VudCo9MjsKICAgIAogICAgdmFfbGlzdCBhcmdzOwogICAgdmFfc3RhcnQoYXJncywgY291bnQpOwoKICAgIHN0cnVjdCBkYXRhICogcGFyYW1ldGVycyA9IChzdHJ1Y3QgZGF0YSopbWFsbG9jKHRvdGFsQXJncypzaXplb2Yoc3RydWN0IGRhdGEpKTsKICAgIGZvciggaW50IGk9MDsgaTx0b3RhbEFyZ3M7IGkrKykKICAgIHsKICAgICAgICBzdHJjcHkocGFyYW1ldGVyc1tpXS5uYW1lLCB2YV9hcmcoYXJncywgY2hhciopKTsKICAgICAgICBwYXJhbWV0ZXJzW2ldLnZhbHVlID0gdmFfYXJnKGFyZ3MsIGludCk7CiAgICB9CgogICAgdmFfZW5kKGFyZ3MpOwoKICAgIGZvciggaW50IGk9MDsgc3RyaW5nW2ldIT0nXDAnOyArK2kgKQogICAgewogICAgICAgIGlmKCBzdHJpbmdbaV0gPT0gJ3snICkKICAgICAgICB7CiAgICAgICAgICAgIGludCByZXBsYWNlZCA9IDA7CiAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICBmb3IoIGo9aSsxOyBzdHJpbmdbal0hPSd9JzsgKytqICk7CgogICAgICAgICAgICBmb3IoIGludCBkYXRhSW5kZXg9MDsgZGF0YUluZGV4PHRvdGFsQXJnczsgKytkYXRhSW5kZXggKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggbWVtY21wKHN0cmluZytpKzEsIHBhcmFtZXRlcnNbZGF0YUluZGV4XS5uYW1lLCBqLWktMSkgPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCIsIHBhcmFtZXRlcnNbZGF0YUluZGV4XS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgaT1qOwogICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYoICFyZXBsYWNlZCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHdoaWxlKGk8PWopCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHV0Y2hhcihzdHJpbmdbaSsrXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpLS07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcHV0Y2hhcihzdHJpbmdbaV0pOwogICAgICAgIH0KICAgIH0KCiAgICBmcmVlKHBhcmFtZXRlcnMpOwp9CgppbnQgbWFpbigpCnsKICAgIGludCB2YWx1ZSA9IDEyMzsKICAgIHByaW50KCJYPXtYfSB2YWx1ZT17dmFsdWV9IG90aGVyPXtvdGhlcn0iLCAyLCAiWCIsIDQ0LCAidmFsdWUiLCB2YWx1ZSk7Cn0=