我找到了这个函数,但我不明白它的某些部分。我有大约 3 天的 C 经验,所以请耐心等待。此函数用于解析命令行参数。
为什么他们将
*arg
重新分配给*c
?我不明白他们为什么要运行 while 循环。
其次,为什么他们会对 char 指针运行 while 循环?我知道 char 实际上是一个字符数组,但我的理解是他们只会对 char 运行 while 循环来单独访问数组字符值,而他们不会执行任何操作。
如何对字符递增?
为什么我们还要有 *c?
我添加了字符串检查以查看 arg 是否为
-styles
例如,它有一个-
这样我就可以解析标志并获取值,它是argv
中的下一个 arg - 是否正确使用?
就像我说的,我有大约 3 天的 C 经验,所以请尽可能彻底和有条不紊地提供帮助,以帮助我更好地理解这个函数和 C 的整体。
void print_args(int argc,char *argv[])
{
int i;
if(argc > 1){
for(i=1;i<argc;i++){
char *arg = argv[i];
char *c = arg;
while(*c){
if(strchr("-", *c)){
printf("arg %d: %s -> %s\n",i,arg,argv[i+1]);
}
c++;
}
}
}
}
最佳答案
1)arg
赋值指向当前char数组的头部,c
用于遍历数组。
2,3,5) while 循环一直运行到 c
指向 (char)0
,顺便说一句,它也是 \0
.所以实际上它们遍历了 char 数组中的每个字符,直到它们到达空终止符。更好的条件是 while (*c != '\0')
,而不是隐含地依赖 '\0' == 0
4) 它们递增一个指针,从而使其指向下一个存储单元,即下一个数组单元。
6) 您的添加将作为识别选项的测试,您仍然需要将它与 -styles
进行比较,以查看它确实是一个有效的选项。
此代码示例可以进行大量修复以使其更健壮和更清晰。 如果这是来自书籍或 C 教程,我建议您寻找另一本。
关于C while 循环调用++ 当它是一个 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546866/