我是C的初学者,并且一直试图弄清楚我的代码在过去一两个小时里出了什么问题.我一直在关注K&R的书,我一直在仔细研究它,但仍然不理解我的逻辑错误.
while (*argv>0){
while (**argv>0){
printf("%c\n",**argv);
**argv++;
}
argv++;
}
Run Code Online (Sandbox Code Playgroud)
任务:使用argv打印输出到我的程序的所有参数.
据我所知,argv是一个指向数组的指针,该数组包含指向字符指针数组的更多指针.所以,我说虽然*argv> 0或者当第一个数组仍然有元素时,我们应该遵循从第一个数组到下一个数组的指针.然后我们应该打印出下一个数组中的所有元素.
小智 11
这一行太多了*:
**argv++;
Run Code Online (Sandbox Code Playgroud)
它应该是这样的:
*argv++;
Run Code Online (Sandbox Code Playgroud)
还有额外的括号,因为++操作具有更高的优先级:
(*argv)++;
Run Code Online (Sandbox Code Playgroud)
它会奏效.
我建议你不要使用指针解除引用你的方式,当下标符号([])允许你这样做时不要混淆自己.
#include <stdio.h>
int main(int argc, char** argv)
{
int i;
for(i = 0; argv[i]; i++)
printf("%s\n", argv[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这也将打印argv[0],这是程序的名称/路径.
现在我的代码做了什么?for(i = 0; argv[i]; i++)计数i从0所述元件时argv[i]解析为假(即0也称为NULL),即所述的最后一个元素argv阵列.然后对于数组中的每个元素,它使用%s格式说明符printf来打印它.您也可以将argv[i]第一个也是唯一的参数传递给printf,但这通常不赞成,因为它为某些字符串格式化攻击打开了大门.
argv是类型,char *argv[]即指向字符串数组的指针(char*'s).argv++移动到数组中的下一个字符串.
通常这个函数写成如下:
int main(int argc, char *argv[]){
int i;
for (i = 0; i < argc; i++){ //loop from 0 to argc (argument count)
printf("%s ", argv[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |