关于main()
的论点,2011 C标准说(5.1.2.2.1:2):
如果argc的值大于零,则数组成员argv [0]到argv [argc-1]包含指向字符串的指针,在程序启动之前由主机环境给出实现定义的值。
此上下文中的“string”一词是否应解释为“以0结尾的字符串”,即一系列非0字符后跟最终的' \ 0'或do / may一些实现以不同的方式将参数传递给程序?
在POSIX平台上,由exec*
函数验证的exec*
函数族之一的参数是指向格式良好的字符串的指针(以及如何?),或者应该是setuid程序假设它已经将格式正确的0终止字符串作为参数传递?
答案 0 :(得分:7)
此上下文中的“string”一词是否应解释为“以0结尾的字符串”,即一系列非0字符后跟最终的' \ 0'或do / may一些实现以不同的方式将参数传递给程序?
7.1.1定义一个字符串:
字符串是由第一个空字符终止并包含第一个空字符的连续字符序列。
exec *函数验证的exec *函数系列之一的参数是否是指向格式良好的字符串的指针(以及如何?)。
exec
系列的POSIX spec状态是以空字符结尾的字符串,并且没有指定如果它们不存在会发生什么。可能是它未定义的行为。这似乎是合理的,因为exec
函数没有合理的方法来验证每个参数是否正确地以null结尾。 (尽管请记住exec*
必须复制其参数,因为地址空间即将被换出。)