例如,如果我们将命令行参数传递给 C 可执行文件,它将传递参数计数 (
argc
) 和参数数组 (argv[]
)。但在 C# 中,如果我们将参数传递给可执行文件,它将仅传递参数数组 (argv[]
),而不传递参数计数 (argc
)。
信息是否以同样的方式发送到
Main()
函数,然后由编程语言解析?还是操作系统在做这一切?
C# 中的数组是包含其长度信息的对象。 C 中的数组只是连续的内存块。当数组传递给 C 中的函数时,会传递指向其第一个元素的指针。该指针不包含有关该数组长度的任何信息,因此该信息必须作为单独的参数传递。
我们可能不会传递这个长度参数的一个地方是当以 char 数组的形式传递字符串时。在这些情况下,我们假设 char 数组以空字符 (
'\0'
) 终止,并且我们可以使用此标记来查找字符串的结尾。将非空终止的 char 数组传递给此类函数可能会导致越界访问和未定义的行为。