Shi*_*eft 3 linux command-line glibc
我正在汇编中开发我自己的 getopt() 版本,并试图让我的头脑围绕这个片段,特别是第 476 行
if (argc < 1)
return -1;
Run Code Online (Sandbox Code Playgroud)
因为正常的调用约定是这样的;
int c = getopt( argc, argv, "vm:drx:");
Run Code Online (Sandbox Code Playgroud)
假设程序员事先没有对 argc 进行任何操作,我认为可能存在的唯一原因是某些 Linux 风格(可能不符合 POSIX)不会传递 argv[0] 应用程序路径和名称。因此,argc 可能为零。这个猜想有可信度吗?
此变量在此过程中使用了 12 次,在此之前的两级过程中,它仅被断言或复制,从未被修改,也根本没有被引用。
考虑一下:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
execve("./testargc", NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)
还有这个程序:
#include <stdio.h>
int main (int argc, char* argv[])
{
printf("%d\n", argc);
}
Run Code Online (Sandbox Code Playgroud)
第一个执行第二个,不带任何参数。路径名未传入,因此 argc 为 0。
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |