如果没有输入参数,我需要为命令行应用程序提供默认行为。
如果没有输入参数,我需要程序来设置argv [1] [0] =' 1'和argv [1] [1] =' \ 0'对于null终止符。
当我尝试用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] = '\0';//add a null terminator to our argv argument, so it can be used with the atoi function
}
另外,我不是在C ++ 11上。
RE-FACTORED CODE:(基本上只围绕问题进行编码,以便我们不必在主函数中操作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;
答案 0 :(得分:4)
如果argc等于1,则数组argv中的第二个值为NULL。你在这里取消引用那个NULL指针:
argv[1][0] = '1';
而不是试图操纵argv,而是改变代码中的逻辑。使用您在内存中控制的数组,将argv复制到它,然后操作数组。
答案 1 :(得分:0)
这一切看起来都很狡猾。我可能会做这样的事情:
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[]
}
答案 2 :(得分:-1)
只是为了支持你的问题,你想要什么并没有错,但是你忘了在想要分配价值的地方分配记忆。
检查一下:
#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\0"));
argv[1][0] = '1';
argv[1][1] = '\0';
//argv[1][2] = '\0';
//argv[1] = '\0';//add a null terminator to our argv argument, so it can be used with the atoi function
}
}
现在它应该按照你想要的方式工作。