如果execlp不包含NULL会发生什么?

时间:2016-06-20 10:47:52

标签: c exec

如果我有代码:

execlp("ls", "ls", "-la"); 
exit(1)

该流程的回报价值是多少? ls返回的值? 1? 执行永远不会结束,因为没有NULL

3 个答案:

答案 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。