我有以下C
示例:
char *message;
char *name = "John";
int age = 100;
message = "Hello, I am John, age 100";
如何将name
和age
作为message
中的参数?
伪代码message = "Hello, I am {name}, age {age}"
更新
我在评论中尝试了以下示例:
char *body = "{ \"capabilities\": {},\"desiredCapabilities\": {}}";
int content_length = sizeof(body);
char *format = "POST /session HTTP/1.1\r\nContent-Type: application/json\r\nContent-Length:%d\r\n\r\n%s";
int len = snprintf(NULL, 0, format, content_length, body);
char *message = malloc(len + 1);
snprintf(message, len + 1, format, content_length, body);
但我在char *message = malloc(len + 1);
收到错误:
error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive]|
答案 0 :(得分:4)
您可以使用snprintf
执行此操作。这与printf
类似,但会将结果放入字符串中,而不是将其写入stdout
。
char message[100];
snprintf(message, sizeof(message), "Hello, I am %s, age %d", name, age);
请注意,此示例使用固定大小的缓冲区。如果要动态分配空间,可以执行以下操作:
const char *format = "Hello, I am %s, age %d";
int len = strlen(format) + strlen(name) + sizeof(age)*3 + 1;
char *message = malloc(len);
snprintf(message, len, "Hello, I am %s, age %d", name, age);
// ...
free(message);
这为格式字符串,每个参数和终止空字节留出了空间。
获得所需长度的另一种方法是两次调用snprintf
,第一次使用NULL
作为字符串,0作为大小。返回值是结果字符串的长度:
const char *format = "Hello, I am %s, age %d";
int len = snprintf(NULL, 0, "Hello, I am %s, age %d", name, age);
char *message = malloc(len + 1);
snprintf(message, len + 1, "Hello, I am %s, age %d", name, age);
// ...
free(message);
关于更新代码中的错误,您显然使用的是C ++编译器而不是C编译器。如果您正在编写C,请使用C编译器。