在学习 c++ 时,我遇到了这个例子:
// В некоторых операционных системах argv[0] может быть просто пустой строкой, без имени программы
// Обрабатываем случай, когда argv[0] может быть пустым или не пустым
if (argv[0])
std::cout << "Usage: " << argv[0] << " <number>" << '\n';
else
std::cout << "Usage: <program name> <number>" << '\n';
这个例子让我陷入了昏迷。据我所知,指向空字符串的指针会一直存在,true所以else它永远不会被执行。要么我不明白,要么在这个例子中,错误不是空字符串,而是argv[0]指向的东西nullptr(据我所知,这些是不同的概念)
标准 :
翻译 :
argv[argc]必须是空指针。
如果argc大于零,则argv[0]指向的字符串就是程序名;如果程序名称在主机环境中不可用,则argv[0][0]必须是空字符。如果argc大于 1,则argv[1]到argv[argc-1]指向的字符串表示程序选项。
你的例子是错误的。它检查
argc == 0和argv[argc] == NULL,也就是说,根本没有数据,没有程序名称,没有参数。根据标准,首先需要看行数,然后看行是否为空(即第一个字母是'\00',而不是示例中的NULL指针)。