为什么在 C# 中向可执行文件传递参数时没有 argc?

问题描述 投票:0回答:1

例如,如果我们将命令行参数传递给 C 可执行文件,它将传递参数计数 (

argc
) 和参数数组 (
argv[]
)。但在 C# 中,如果我们将参数传递给可执行文件,它将仅传递参数数组 (
argv[]
),而不传递参数计数 (
argc
)。

信息是否以同样的方式发送到

Main()
函数,然后由编程语言解析?还是操作系统在做这一切?

c# c command-line command-line-arguments
1个回答
1
投票

C# 中的数组是包含其长度信息的对象。 C 中的数组只是连续的内存块。当数组传递给 C 中的函数时,会传递指向其第一个元素的指针。该指针不包含有关该数组长度的任何信息,因此该信息必须作为单独的参数传递。

我们可能不会传递这个长度参数的一个地方是当以 char 数组的形式传递字符串时。在这些情况下,我们假设 char 数组以空字符 (

'\0'
) 终止,并且我们可以使用此标记来查找字符串的结尾。将非空终止的 char 数组传递给此类函数可能会导致越界访问和未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.