Bra*_*don 3 c linux pointers argv
所以,我正在研究一个基于Linux的命令行实用程序,它必须接受一些标志,我注意到了一些有趣的行为.我将发布我在主实用程序之外使用的测试代码.我正在使用这段代码,所以在我可以插入工作代码之前,我没有必要改变实际的实用程序.所以这是我一直在摆弄的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
while(--argc && (*++argv)[0] == '-')
putchar('*');
printf("\n%s\n", argv[0]);
}
Run Code Online (Sandbox Code Playgroud)
请忽略这样一个事实,即所有这个程序都打印星号,并在使用一个参数-b调用时打印自己的名称.打印星号只是为了表明循环运行一次.所以,我在终端中以"./test -n"运行它,我希望输出为:
*./测试
令我惊讶的是,输出结果如下:
*-b
我有一个关于声明(*++argv)[0]正在做什么的工作理论
,但我仍然有点朦胧.我的假设是它遍历指针数组,查看指向的每个字符串中的第一个字符,(*++argv)[0]现在*argv[0]是第一个参数字符串的解除引用或元素零.
所以,基本上我有三个问题:
我现在对此感到很困惑,并尝试了我能想到的一切来解决这个问题.有一次我有一个打印字母表的循环,我不知道程序访问的内存部分.最有趣的排列是从某个地方提取sshid变量.
提前感谢大家的帮助.
++argv更改argv指向下一个参数.
尝试类似的东西
int i = 0;
while(--argc && argv[++i][0] == '-')
Run Code Online (Sandbox Code Playgroud)
它维护一个单独的索引,而不是覆盖argv.
要么
char** argp = argv;
while(--argc && (*++argp)[0] == '-')
Run Code Online (Sandbox Code Playgroud)
它与原始版本的工作原理相同,只是它更改了原件的副本argv而不是原件.
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |