我有一个关于通过命令行传递参数的问题。
我的main()
看起来像
int main(int argc, char **argv){
int b, d, n, flag;
char *init_d, tst_dir[100];
argv++;
init_d=*(argv++);
//printf(); <--------What do I have to do to init_d so that I can print it later?
如果argv
是一个指针数组的指针,我指的是init_d
指向指针argv
所指向的值? (如果这甚至有意义的话)
我假设我必须将该值输入字符数组才能将其打印出来,但如果我不知道我传入的“字符串”的大小,我不知道如何实现这一点。 例如,如果我运行我的代码'./myprogram hello'与'./myprogram alongerinput'进行比较
答案 0 :(得分:14)
您可以打印参数而不将它们转换为字符数组。它们是以null结尾的C字符串,printf
在早餐时吃它们:
for (i=0; i<argc; i++)
printf("%s\n", argv[i]);
答案 1 :(得分:4)
argv
是一个指向以null结尾的字符串数组的指针。您不需要知道字符串的大小;所有你需要做的就是指向值,因为字符串的结尾用'\ 0'表示。
char* init_d = argv[0];
printf("%s", init_d);
如果您确实想知道字符串的长度,可以使用strlen(argv[0])
。
答案 2 :(得分:4)
以下是将命令行参数转换为单个字符串的示例:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc < 1)
return 0;
int i;
int strsize = 0;
for (i=1; i<argc; i++) {
strsize += strlen(argv[i]);
if (argc > i+1)
strsize++;
}
printf("strsize: %d\n", strsize);
char *cmdstring;
cmdstring = malloc(strsize);
cmdstring[0] = '\0';
for (i=1; i<argc; i++) {
strcat(cmdstring, argv[i]);
if (argc > i+1)
strcat(cmdstring, " ");
}
printf("cmdstring: %s\n", cmdstring);
return 0;
}
答案 3 :(得分:3)
int main(int argc, char **argv){
while(--argc>0)
printf("%s\n",*++argv);
return 0;
}
argc: argument count i.e. number of arguments in command line
argv: argument vector
如果你的程序是myProg
,那么命令行中的myProg hello
有argc = 2(包括程序名),argv [0]是“myProg”,而argv [1]是“你好”< / p>
答案 4 :(得分:2)
运行后
init_d = *(argv++);
(parens不是必需的,顺便说一下),init_d是指向一个字符的指针。在C中,字符串是一个符合契约的字符指针,如果它进展得足够远,最终会到达一个空字符('\ 0'),表示字符串的结尾。换句话说,init_d现在正是您想要的字符串。您可以使用
进行打印printf("%s", init_d);
注意,顺便说一句,* argv ++为您提供了argv的第一个元素,它实际上是命令行中函数的名称。您可能需要第一个命令行参数,您将使用* ++ argv。
答案 5 :(得分:0)
您可以使用
输出使用init_d指向的字符串printf("%s", init_d);
“%s”输出字符串的所有字符,直到达到'\ 0'。在C中,字符串以空值终止。