连接所有参数(可执行文件名除外)

时间:2010-06-27 08:51:33

标签: c linux

是否有一个C函数可以将所有传递的参数(可执行文件的名称除外)连接到char*并返回它?

4 个答案:

答案 0 :(得分:5)

试试:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    unsigned int i;
    size_t len = 0;
    char *_all_args, *all_args;

    for(i=1; i<argc; i++) {
        len += strlen(argv[i]);
    }

    _all_args = all_args = (char *)malloc(len+argc-1);

    for(i=1; i<argc; i++) {
        memcpy(_all_args, argv[i], strlen(argv[i]));
        _all_args += strlen(argv[i])+1;
        *(_all_args-1) = ' ';
    }
    *(_all_args-1) = 0;

    printf("All %d args: '%s'\n", argc, all_args);

    free(all_args);

    return 0;
}

答案 1 :(得分:3)

为什么会这样?只需在循环中使用strcat

答案 2 :(得分:1)

这样的东西?不保证会编译。

#include <string.h>
#include <stdio.h>

int main(int argc, char ** argv) {
  int i;
  int len = 1;
  char * str;

  for (i = 1; i < argc; i++) {
     len += strlen(argv[i]);
  }

  str = malloc(sizeof(char)*len);
  str[0] = '\0';

  for (i = 1; i < argc; i++) {
     strcat(str, argv[i]);
  }

  //Use str for whatever you want
  printf("My string is %s\n", str);

  free(str);
}

答案 3 :(得分:1)

我认为没有这样的功能,但如果我没错,你只需要:

  • 获取长度:len = strlen(argv[1]) + strlen(argv[2]) + ...并检查溢出
  • 使用malloc:malloc(len + 1) * sizeof(char))
  • 将your_copy [0]设置为'\ 0'
  • 对每个剩余的argv []
  • 使用strcat(your_copy, argv[1])strcat(your_copy, argv[2]) ....
编辑:哦,之前的答案可能会更好。 ;)