Я думаю, что вы ищете sprintf
:
int sprintf(char *STR, const char *FORMAT, ...);
В вашем случае вы бы использовали его следующим образом:
sprintf(some_allocated_output_string, "openssl -dgst md5 -hmac %s", key);
system(some_allocated_output_string);
РЕДАКТИРОВАТЬ:
После просмотра кода, который вы пробовали, я вижу, что не дал вам полного ответа.
У вас есть два варианта здесь (предположим, что STRING_SIZE
ниже - это некоторый #defined
размер, вроде 300 или что-то):
1) использовать предварительно выделенный буфер:
char sstring[STRING_SIZE];
sprintf(sstring, "openssl -dgst md5 -hmac \"%s\" -out data3.md5 data3.txt",(char *)key);
system(sstring);
2) использовать malloc / free:
#include <stdlib.h>
//blah blah blah
char *sstring=NULL;
//blah blah blah
sstring = malloc(STRING_SIZE);
sprintf(sstring, "openssl -dgst md5 -hmac \"%s\" -out data3.md5 data3.txt",(char *)key);
system(sstring);
free(sstring);
Я бы предложил первыйподход.Наряду с этим, я бы настоятельно рекомендовал позаботиться о том, чтобы @ pmg предложил snprintf
, если ваш компилятор его поддерживает.Это будет выглядеть так:
char sstring[STRING_SIZE];
int result = 0;
result = snprintf(sstring, STRING_SIZE, "openssl -dgst md5 -hmac \"%s\" -out data3.md5 data3.txt",(char *)key);
// Perform a check on result here, in case you ran out of space.
// If result > STRING_SIZE, you need to try a larger buffer.
system(sstring);