【发布时间】:2021-06-17 22:30:53
【问题描述】:
我没有时间以任何方式提交我的解决方案,但我很沮丧。
我正在编写一个函数,该函数将在执行时采用argv,并将其内容连接到一个字符串中,命令由\n 分隔
像这样"./a.out \n a \n b \n c \n ..etc"。
这是 m 代码(它不起作用):
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *my_concat_params(int argc, char **argv){
char argss[argc];
for (int i = 0; i<argc;i++){
strcpy(argss[i], argv[i]);
}
return argss[0];
}
int main(int argc, char **argv){
//char *cmdlne = my_concat_params(argc , argv);
printf("%d, %s\n", argc, argv[argc-1]);
return 0;
}
通过指向 pinter 并返回我想要的字符串的正确方法是什么?
【问题讨论】:
-
您的 argss 在函数堆栈上,返回它是未定义的行为
-
函数返回后不能使用栈变量,需要在堆上分配缓冲区。
-
另外,
strcpy要求每个 arg 都是char *。您将char传递给第一个参数。而对于串联,strcat会更合适。 -
您有两个选择。在
main中声明输出数组char argss[1000];,并将其作为第三个参数传递给函数。malloc数组的内存char *argss = malloc(1000);并从函数return argss;返回指针
标签: arrays c pointers argv argc