草庐IT

c++ - 将 yyin 更改为 argv[1] Flex & Bison

我正在从事Flex&Bison项目。我的flex&bison运行良好,但我正在尝试将argv作为输入(yyin)。所以我改变了yyin以便它接受argv[1]但它实际上不起作用。似乎它采用了argv[1],但后来我得到了一个语法错误,即使我认为我的字符串可以完美地工作。这是我的弹性:%{#include"parser.hpp"externintyyparse();%}%optionnoyywraptexte[a-zA-z]+entier[0-9]+(\.[0-9])?%%{entier}{yylval.num=atoi(yytext);return(NUMBER);}"pi"retur

c++ - 对此 argv 的使用感到困惑

intmain(intargc,char**argv){for(argc--,argv++;argc>0;argc-=argCount,argv+=argCount){argCount=1;switch(argv[0][1]){case'q':testnum=atoi(argv[1]);argCount++;break;default:testnum=1;break;}}//...............我的问题是argv[0][1]是什么意思,for()中的条件让我感到困惑,我的意思是for(argc--,argv++;argc>0;argc-=argCount,argv+=argC

c++ - 处理 main 中的可选参数

假设我有一个main函数,它基本上只是调用另一个函数作为程序的入口点。该函数(以及整个程序)有一些强制参数和一些可选参数:#include#includevoidfunction_to_call(std::stringarg1,std::stringarg2,std::stringarg3,std::stringarg4,std::stringarg5="foo",std::stringarg6="bar",intnum1=1,intnum2=2){//dofancystuffhere}intmain(intargc,char**argv){intnum1,num2;std::stri

c++ - 从 'const char**' 到 'char* const*' 的无效转换

我正在做一个学校作业,我必须调用execvp,其方法签名如下execvp(constchar*file,char*constargv[])但是我的数据是这样的:std::vector我一直在尝试将所述vector转换为execvp()的第二种格式的正确格式,但不可避免地会出现以下错误:command.cc:120:29:error:invalidconversionfrom‘constchar**’to‘char*const*’[-fpermissive]execvp(args[0],argv);我尝试了不同的变体,但它们都会导致此错误。这个错误让我很困惑,因为我不知道const*是什

c++ - boost::program_options:如何获取应用程序名称?

使用BoostProgramOptions,如何获得argv[0]的字符串等价物? 最佳答案 我认为这是不可能的。这可能是因为程序名称也可以合法地用作选项名称。命令行解析器代码明确跳过相关的argv成员:templatebasic_command_line_parser::basic_command_line_parser(intargc,charT*argv[]):detail::cmdline(//Explicittemplateargumentsarerequiredbygcc3.3.1//(atleastmingwversi

c++ - 内置数组类型的开始和结束函数

我正在尝试获取C风格字符串数组(指向char的指针数组)的开始指针和结束指针。为什么我不能调用begin和end函数来获取它们?#include#includeintmain(intargc,char*argv[]){char**first=std::begin(argv),**last=std::end(argv);}编译器说我调用begin(char**&)没有匹配的函数 最佳答案 函数应用于数组。至于参数argv那么它实际上具有类型char**因为按值传递的数组被转换为指向其第一个元素的指针,并且参数也被调整为指针。你可以简单

c++ - 将 WinMain(或 wWinMain)参数传递给普通的 main

如果您尝试将构建类型从Console(/SUBSYSTEM:CONSOLE)更改为Windows(/SUBSYSTEM:WINDOWS),您将收到一个错误提示该条目缺少WinMain点:我认为解决这个问题的最好方法是从WinMain调用您的普通intmain(int,char**):#ifdef_WINDOWS_INTWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRlpCmdLine,INTnCmdShow){returnmain(0,NULL);}#endif问题是ImageMagick正在使用控制台参数(我也计划在未来使用

C++如何将argv作为字符串保存到 vector

我试图将argv作为字符串保存到vector中,但我不断收到错误:seereferencetofunctiontemplateinstantiation'std::vector::vector(_Iter,_Iter)'beingcompiled我试过了Saveargvtovectororstring而且它不起作用我正在使用MicrosoftVisualStudio2010。这是我的代码:#include"stdafx.h"#include#include#includeint_tmain(intargc,_TCHAR*argv[]){std::vectorallArgs(argv+1

c++ - 缺少关于 "int main(int argc, char* argv[])"的知识

我是一名物理学家,通常我只想完成计算,这就是我真正需要的。不过我一直在用intmain(intargc,char*argv[])非常令人高兴的是二进制文件在我没想到的级别上变得灵活,即初始化变量~$./program.exeabc(a,bandcarenumbersinthiscase,notlettersok?)所以问题是*如何在不使用文件的情况下以这种方式(或其他方式)“解析”或“传输”事物?*示例:假设“a.exe”给出了一组“X-Y”点(就像在电子表格上一样),我要将其插入“b.exe”。或者说我使用bash/awk脚本来格式化“a.exe”的输出格式,以便在gnuplot上绘

c++ - 递增数组变量时需要不一致的左值错误

我在执行*++a时收到“需要左值作为增量操作数”。我哪里出错了?我认为它将等同于*(a+1)。这种行为很奇怪,因为*++argv工作正常。请帮忙。#includeintmain(intargc,char*argv[]){printf("Argis:=%s\n",*++argv);inta1[]={1,2,3,4,5,6};inta2[]={7,8,9,10,11,12};int*a[2];a[0]=a1;a[1]=a2;printf("ptr=%d\n",*++a);return0;} 最佳答案 a是一个常量(数组名)你不能通过做+