如何测试 argc,然后将默认值分配给 argv[1]
how can I test argc and then assign default values to argv[1]?
如果没有输入参数,我需要为命令行应用程序提供默认行为。
如果没有输入参数,我需要程序为 null 终止符设置 argv
[1][0] = '1' 和 argv[1][1] = '\0'。当我尝试用 g++ 编译我的代码时,我不断得到核心转储,这是导致问题的原因:
int main(int argc, char * argv[]){
//for testing we put some dummy arguments into argv and manually set argc
//argc = 1;//to inlcude the program name
//we put a defualt value into argv if none was entered at runtime
if(argc == 1){
argv[1][0] = '1';
argv[1][1] = ' ';//add a null terminator to our argv argument, so it can be used with the atoi function
}
另外,我不在第 11 C++。
重构代码:(基本上只是围绕问题进行编码,这样我们就不必在主函数中操作 argv[])
int argvOneAsInt;
if(argc != 1){
argvOneAsInt = atoi(argv[1]);//use atoi to convert the c-string at argv[1] to an integer
}
else{
argvOneAsInt = 1;
如果 argc 等于 1,则数组 argv 中的第二个值为 NULL。您正在此处取消引用该 NULL 指针:
argv[1][0] = '1';
与其尝试操作 argv,不如更改代码中的逻辑。使用您在内存中控制的数组,将 argv 复制到其中,然后操作该数组。
这一切看起来相当狡猾。我可能会做这样的事情:
int main(int argc, char* argv[])
{
std::string arg1 = "1"; // set default
if(argc > 1) // override default if present
arg1 = argv[1];
// Now use arg1 and forget about argv[]
}
只是为了支持你的问题,你想要的东西没有错误,但你忘记在你想要分配值的地方分配内存。
检查这个:
#include <string.h>
#include <malloc.h>
using namespace std;
int main(int argc, char * argv[]){
//for testing we put some dummy arguments into argv and manually set argc
//argc = 1;//to inlcude the program name
//we put a defualt value into argv if none was entered at runtime
if(argc == 1){
argv[1] = (char*)malloc(strlen("1 "));
argv[1][0] = '1';
argv[1][1] = ' ';
//argv[1][2] = ' ';
//argv[1] = ' ';//add a null terminator to our argv argument, so it can be used with the atoi function
}
}
现在它应该按照您想要的方式工作。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 如何在模板类函数中分配结构值?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 从不使用 C/C++ 默认值/分配给变量的值
- 使用Boost Spirit将默认值分配给变量
- 将重载函数分配给功能指针作为默认值
- 分配默认值 std::function
- map检查map是否被分配了非默认值
- 由c++中的双默认构造函数分配的值