从命令行向main()传递参数我所理解的是argc的最小值为1,而argv [0]将始终具有程序名称及其路径.
如果在命令行提供了参数,那么argc的值将大于1,而argv [argc-1]的argv将具有这些参数.
argv [0]将是包含程序名称的字符串,如果不可用,则为空字符串.
现在,argv [0]如何以及何时可以使用空字符串?我的意思是程序名称及其路径将始终可用,所以什么时候它可以为空?
作家说"如果不可用"但是何时以及如何可能无法获得该计划名称?
将一个void*总是有相同的表示为char*?
细节:
我想使用一个可变参数函数,它使char*被(char*)0类似的终止:
int variadic(char*, ...); //<-prototype
variadic("foo", "bar", (char*)0); //<- usage
Run Code Online (Sandbox Code Playgroud)
我想,以取代(char*)0用NULL,但是从判断
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf的:
66)宏NULL在(和其他头部)中定义为空指针常量; 见7.19.
3值为0的整型常量表达式或类型为void*的表达式称为空指针常量.66)如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较.
我不能,因为在variadic上下文中,我绝对需要char*一个平原0是不可接受的.
如果我定义:
#define NIL (void*)0 /*<= never a plain 0*/
Run Code Online (Sandbox Code Playgroud)
用它来终止我是合法的variadic(char*,...)吗?
是否可以执行argc = 0的进程?我需要执行一个程序,但它的argc等于0是非常重要的.有没有办法做到这一点?我试图在命令行中放置2 ^ 32个参数,使其看起来好像argc = 0但是参数个数有一个最大限制.
据我所知,C定义NULL如下:
#define NULL ( (void *) 0)
Run Code Online (Sandbox Code Playgroud)
然后,我们应该如何定义NULL_POINTER?我在我的程序中将它定义为相同并且它有效,但我认为这只是一个巧合:
#define NULL_POINTER ( (void *) 0)
Run Code Online (Sandbox Code Playgroud)
如果有的话,逻辑定义是什么?
我遇到的问题是,运行程序后,它出错说我的 argv 包含 1 个条目,并且需要将其设置为 0
import subprocess
args = ['/challenge/embryoio_level75']
subprocess.run(args)
Run Code Online (Sandbox Code Playgroud) 在cppreference.com上我找到了以下代码示例:
#include <iostream>
#include <string_view>
// Print a string surrounded by single quotes, its
// length and whether it is considered empty.
void check_string(std::string_view ref)
{
std::cout << std::boolalpha
<< "'" << ref << "' has " << ref.size()
<< " character(s); emptiness: " << ref.empty() << '\n';
}
int main(int argc, char **argv)
{
// An empty string
check_string("");
// Almost always not empty: argv[0]
if (argc > 0) // <--- is this necessary?
check_string(argv[0]);
}
Run Code Online (Sandbox Code Playgroud)
argc …