我希望bug变量是动态的,并取决于传递给它的sizeof(cmd + args)
void excmd(const char* cmd, ...) {
char buf[100]; // I want it to be dynamic like size of(cmd+args)
va_list args;
va_start(args,cmd);
vsnprintf(buf,sizeof(buf),cmd,args);
system(buf);
va_end(args);
}
答案 0 :(得分:3)
您可能想要这样的东西:
void excmd(const char* cmd, ...) {
char *buf = NULL;
va_list args;
va_start(args, cmd);
int sizeneeded = vsnprintf(buf, 0, cmd, args) + 1;
va_end(args);
buf = malloc(sizeneeded);
va_start(args, cmd);
vsnprintf(buf, sizeneeded, cmd, args);
va_end(args);
system(buf);
free(buf);
}
或
void excmd(const char* cmd, ...) {
va_list args;
va_start(args, cmd);
int sizeneeded = vsnprintf(NULL, 0, cmd, args) + 1;
va_end(args);
char buf[sizeneeded];
va_start(args, cmd);
vsnprintf(buf, sizeneeded, cmd, args);
va_end(args);
system(buf);
}