我希望能够创建模板字符串,然后像这样使用它:
int execute_command(char *cmd) {
//...
}
char *template_command = "some_command %s some_args %s %d";
char *actual_command = template_command % (cmd1, arg1, 123);
// error, how do I do that?
int res = execute_command(actual_command);
答案 0 :(得分:1)
使用snprintf
和malloc
(snprint
返回它写入的字符串的长度,只有缓冲区足够大,并且接收缓冲区的大小)。 POSIX asnprintf
很好地打包了
如果你没有它,请像这样定义你自己:
char* my_asnprintf(const char* format, ...) {
va_list arg;
va_start(arg, format);
size_t n = 1 + vsnprintf((char*)format, 0, format, arg);
va_end(arg);
char* ret = malloc(n);
if(!ret)
return ret;
va_start(arg, format);
vsnprintf(ret, n, format, arg);
va_end(arg);
return ret;
}
不要忘记free
缓冲区。
答案 1 :(得分:1)
如果您知道actual_command
的最大长度,则可以使用以下任一项:
char actual_command[MAX_LEN+1];
// Option #1
sprintf(actual_command, template_command, cmd1, arg1, 123);
// Option #2
snprintf(actual_command, MAX_LEN+1, template_command, cmd1, arg1, 123);
如果未正确定义MAX_LEN
,则:
actual_command
的内容)