我不知道该怎么办!我非常了解C基础知识.结构,文件IO,字符串等除了CLA之外的一切.出于某种原因,我无法理解这个概念.任何建议,帮助或建议.PS我是一个linux用户
好的,我已经搜索并发现以下两个StackOverflow主题让我朝着正确的方向前进:
注意:所有代码都是PSEUDO-CODE.将在其工作时发布可编译代码.
但是,我仍然对如何在C中使用getopt_long()感到困惑.我正在编写的程序被定义为具有以下可能的标记(但可以包含您绝对需要的数量,其余用空值填充) ):
id3tagEd filename -title "title" -artist "artist" -year 1991 -comment "comment" -album "album" -track 1
Run Code Online (Sandbox Code Playgroud)
现在,根据我的阅读,我需要利用一个结构来获取长期选项,对吗?如果是这样,我写了一些类似的东西:
struct fields field =
{
char *[] title;
char *[] artist;
char *[] album;
int year;
char *[] comment;
int track;
}
static struct options long_options[] =
{
{"title", 0, &field.title, 't'},
{"artist", 0, &field.artist, 'a'},
{"album", 0, &field.album, 'b'},
{"year", 0, &field.year, 'y'},
{"comment", 0, &field.comment, 'c'},
{"track", 0, &field.track, 'u'},
{0, 0, 0, 0}
}
Run Code Online (Sandbox Code Playgroud)
现在,根据我收集的内容,我将通过以下方式调用它:
int …
Run Code Online (Sandbox Code Playgroud) 特别是,为什么有时某些命令的选项前面有一个+
符号,有时候是一个-
符号?
例如:
sort -f
sort -nr
sort +4n
sort +3nr
Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以解释如何通过命令行传递参数?我真的很困惑它是如何工作的。现在我正试图将一个整数传递给主程序。我该怎么做呢?
编辑:继续从指针获取初始化使整数没有强制转换 [-Wint-conversion] 错误?
#include <stdio.h>
#define PI 3.1416
int
main (int argc, char *argv[])
{
double r,area, circ;
char a = argv[1];
int num = a - '0';
printf("You have entered %d",num);
r= num/2;
area = PI * r * r;
circ= 2 * PI * r;
printf ("A circle with a diameter of %d ", num);
printf ("has an area of %5.3lf cm2\n", area);
printf ("and a circumference of %4.2lf cm.\n", circ);
return (0);
}
Run Code Online (Sandbox Code Playgroud) 我有一个接受可选参数的程序.必要的参数是文件和整数(1或更多).可选参数是字符串和整数的混合.
因此,命令行上的正确输入可能是:
./main trace_file 8 12 # (only necessary arguments)
./main –n 3000000 –p page.txt trace_file 8 7 4 # (with optional arguments)
Run Code Online (Sandbox Code Playgroud)
我需要将整数trace_file
转换成数组.在启用可选参数时,我无法弄清楚如何执行此操作,因为命令行上有另一个整数.推进正确的方向将非常感激,因为我无法弄清楚如何做到这一点.
编辑:到目前为止,解析参数的所有内容是:
for(j=2, k=0; j<argc; j++, k++) {
shift += atoi(argv[j]);
shiftArr[k] = 32 - shift;
bitMaskArr[k] = (int)(pow(2, atoi(argv[j])) - 1) << (shiftArr[k]);
entryCnt[k] = (int)pow(2, atoi(argv[j]));
}
Run Code Online (Sandbox Code Playgroud)
但这只有在没有输入可选参数时才有效.
我希望我的控制台应用程序使用连字符命名的输入,如下所示:
myApp -S "myServerName" -D "myDatabaseName"
Run Code Online (Sandbox Code Playgroud)
而不是通常的:
myApp "myServerName" "myDatabaseName"
Run Code Online (Sandbox Code Playgroud)
我认为第一个对于想要将来使用我的控制台应用程序的开发人员更友好。我想我不知道这种类型的输入叫什么,否则我会在谷歌上找到它。
可能重复:
从命令行将参数传递给C程序.
mypro parameter
Run Code Online (Sandbox Code Playgroud)
如上所示运行,如何在mypro中获取参数main()
:
#include <iostream>
int main()
{
char* str = "default_parameter";
if(parameter_exists())str = parameter;
...
}
Run Code Online (Sandbox Code Playgroud)
如何实现上面的伪代码?
如何从命令行读取文件名并在我的c ++代码文件中使用它?
例如:./ cppfile inputFilename outputFilename
任何帮助是极大的赞赏!
可能重复:
从命令行将参数传递给C程序
我试图将终端中的三个参数传递给一个名为replace的函数.我想知道是否可以从终端进行以下操作
% ./replace d DDD mytest.tx
Run Code Online (Sandbox Code Playgroud)
我已经在线查看,但只能找到有关将值直接传递给main()而不是内部函数的信息.
编辑:我编辑了以下主要功能:
void replace(char* string_a, char* string_b, char* string_f)
{
}
int main(int argc, char *argv[])
{
if(argc < 4)
{
printf("Not enough arguments\n");
return 0;
}
replace(argv[1],argv[2],argv[3]);
}
Run Code Online (Sandbox Code Playgroud)