我有一个关于通过命令行传递参数的问题.
我的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?
Run Code Online (Sandbox Code Playgroud)
如果argv是一个指向指针数组的指针,我指定init_d指向由指针argv指向的值指向?(如果这甚至有意义)
我假设我必须将该值转换为字符数组才能将其打印出来但如果我不知道我传入的"字符串"的大小,我不知道如何实现这一点.例如,如果我运行我的代码'./myprogram hello'与'./myprogram alongerinput'相比较
Dav*_*nan 14
您可以打印参数而不将它们转换为字符数组.它们是以null结尾的C字符串并printf在早餐时吃它们:
for (i=0; i<argc; i++)
printf("%s\n", argv[i]);
Run Code Online (Sandbox Code Playgroud)
以下是将命令行参数转换为单个字符串的示例:
#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;
}
Run Code Online (Sandbox Code Playgroud)