我正在编写一个代码,其中包括接受来自C ++命令行的输入。该程序不执行,并且gdb运行说“basic_string :: _ S_construct NULL无效”。以下是代码段:
任何人都可以看一下并帮我解决这个问题吗?
int main( int argc,char *argv[])
{
std::string structure=argv[1];
std::string sorshuf=argv[2];
int size=atoi(argv[3]);
int RunNum=atoi(argv[4]);
答案 0 :(得分:0)
#include <iostream>
int main( int argc,char *argv[]) {
std::string structure=argv[1];
}
如果您使用 no 参数输入并运行该程序,则会得到:
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct null not valid
Aborted (core dumped)
这正是你所描述的。
如果你在运行时添加一个参数,问题就会消失。
因此,它是因为在运行时没有提供参数。
如果您已经超越了数组的末尾,那么您在NULL
中获得argv[]
的唯一方法就是,因为标准要求将其作为检测数据的一种方式结束(另一个当然是argc
)。
因此,您需要重新考虑您为可执行文件提供足够参数的论点(如评论中所述) - 我认为您发现自己不正确。
我将启动,将以下代码放在main的开头:
std::cerr << "argc = " << argc << '\n';
if ((argc > 0) && (argv[1] == NULL)) std::cerr << "Urk! 1\n";
if ((argc > 1) && (argv[2] == NULL)) std::cerr << "Urk! 2\n";
std::cerr << "Past Urks\n";