如果我有代码:
execlp("ls", "ls", "-la");
exit(1)
该流程的回报价值是多少?
ls
返回的值?
1
?
执行永远不会结束,因为没有NULL
?
答案 0 :(得分:2)
如果execlp不包含NULL,会发生什么?
execlp()
将调用未定义的行为,试图访问尚未传递的参数。
(char*) NULL
标记传递给execlp()
的参数列表的结尾。
由于调用未定义的行为,从那一刻起就可能发生任何事情。
答案 1 :(得分:1)
(DT_DBTIMESTAMP2)(REPLACE(SUBSTRING(OldDateCol,1,10),".","-")+SUBSTRING(OldDateCol, 11, LEN(OldDateCol)))
期望可变数量的参数。因此,它会搜索堆栈,直到找到NULL参数并使用这些参数。由于您尚未传递这些参数,因此您将基本上调用未定义的行为。
答案 2 :(得分:0)
execlp
或其他exec
系列函数在suceed时不返回,如果有任何错误,它们只返回-1
。同样根据手册页,最后一个参数必须是空指针。
execl(),execlp()和execle()函数中的const char * arg和后续省略号可以被认为是arg0,arg1,...,argn。他们一起描述了一个 一个或多个指向以null结尾的字符串的指针的列表,这些字符串表示执行程序可用的参数列表。第一个论点,按照惯例, 应指向与正在执行的文件关联的文件名。参数列表必须以空指针终止,因为它们是可变参数 函数,此指针必须强制转换(char *)NULL。