获取sizeof可变数量的参数

时间:2019-02-13 14:01:40

标签: c

我希望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);
}

1 个答案:

答案 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);    
}