我是C ++的新手,我正在尝试编写一个程序以接受命令行参数并生成一个.desktop文件。我正在尝试实现argv值的识别,但是我不断收到std :: logic_error
我的代码是:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
string name;
string comment;
for(int i = 1; i <= argc; i++) {
char* tmp[] = {argv[i]};
string param = *tmp;
string paramVal = argv[i+1];
if(param == "-h") {
cout << "-h Display this help dialogue" << endl;
cout << "-n Set entry name" << endl;
cout << "-c Set entry comment" << endl;
cout << "-e Set entry executable path" << endl;
cout << "-i Set entry icon" << endl;
break;
}
else if(param == "-n") {
name = paramVal;
i++;
continue;
}
else if(param == "-c") {
comment = paramVal;
i++;
continue;
}
else if(param == "-e") {
}
else if(param == "-i") {
}
else {
cout << "ERROR >>> Unrecognised parameter %s" << param << endl;
}
}
cout << "Name: %s\nComment: %s" << name << comment << endl;
return(0);
}
程序可以正常编译(使用g ++),但是当我尝试运行./createDesktopIcon -n a -c b
时出现以下错误
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted
请帮助,因为它非常令人沮丧
答案 0 :(得分:2)
这是我看到的问题:
i <= argc
您想比较i < argc
,因为数组中的argv[argc]
元素实际上是argv
数组中的最后一个元素。
past 。
另外,这里:
string paramVal = argv[i+1];
这也将无限制地访问数组。
您可能想看看getopt为您完成所有这些工作。