我试图从命令行参数int main(int argc, char *argv[])
以类似的方式从键盘获取命令,但在一个单独的函数中。当我在getCmd()
函数的范围内解析和打印它们时,所有外观和行为都如预期的那样,但只要它们返回到主函数,它们就会变成一堆垃圾。我的问题在代码下面。通过引用传递指针数组
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
void getCmd(char *cmd, char *args[])
{
char input[81] = { 0 };
char *next_token = NULL;
printf("$ ");
fgets(input, 81, stdin);
input[strcspn(input, "\n")] = 0;
cmd = strtok_s(input, " ", &next_token);
if (!strcmp(cmd, "mv"))
{
args[0] = strtok_s(NULL, " ", &next_token);
args[1] = strtok_s(NULL, " ", &next_token);
printf("\n\n%s\n%s\n%s\n\n", cmd, args[0], args[1]);
}
}
int main(void)
{
char *cmd = NULL, *args[5];
cmd = (char *)calloc(20,sizeof(char));
for (size_t i = 0; i < (size_t)5; i++)
{
args[i] = (char *)calloc(20,sizeof(char));
}
getCmd(cmd, args);
printf("\n\n%s \n%s\n%s", cmd, args[0], args[1]);
return 0;
}
我不认为它的相关性,但我在64位处理器,Windows 7操作系统上使用VS 2015社区与Visual C++编译器。
我的问题:
- 我应如何通过CMD和args []引用?
- 是否有任何广泛接受的成语处理这种情况?
我看了槽数的similiar问题,但没有找到,在这种情况下有效的解决方案,如果问题是重复的,告诉我,我会关闭it.Since我'新的stackoverflow任何问题格式化技巧将不胜感激。干杯! (:。
引入另一个间接层次。 – alk
为什么有人会通过引用传递指针? – farukdgn
@farukdgn:在函数内部分配内存,访问函数在调用者内部。 – alk