是否有一个C函数可以将所有传递的参数(可执行文件的名称除外)连接到char*
并返回它?
答案 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(len + 1) * sizeof(char))
strcat(your_copy, argv[1])
,strcat(your_copy, argv[2])
....