已解决

c语言 程序的问题

标签:c语言 程序 代码
回答:3   浏览:653   提问时间:2012-01-27 01:34
下面是我的代码
#include <stdio.h>

int main(int argc, char *argv[])
{
int i;

if ((*++argv)[0] == '*')
i = 3 * 5;
printf (" %d\n", i);

return 0;
}
输出的结果:
[root@localhost 5]# ./a.out *
4972912
[root@localhost 5]# ./a.out "*"
15

用其他符号都没有这问题
我想问为什么乘号一定要加上引号才可以
命令行中的乘号是什么
最佳答案
告诉你,在linux系统中,*是个通配符,shell在进入你的程序之前,会将*解释为你的当前目录下的所有文件,例如你的当前目录下有两个文件,a.txt 和b.c
那么你运行:./a.out *时,shell传给你的程序的参数就是:
./a.out a.txt b.c

你可以将该参数打印出来看看,就知道是怎么回事了

当你将参数加上引号后,shell不进行处理,直接将*传给你的程序
无标题文档
 
“丝足会所”
90后“非主流”黑丝自拍
各地校花裸体写真照片
美女现场被强脱黑丝袜
富二代自曝丝袜高跟生活
新娘被灌酒遭好友强奸
“纸片女”完美性感写真
小动物剃毛后的超囧模样
偷拍KTV恋足者淫乱聚会
酒吧里的激情川妹子

 

其它答案
*argv[]是指向字符型的指针数组, 其内容为命令行的参数. 命令本身(这里是./a.out)是第0个参数, *++argv指向命令行中第1个参数, 也就是./a.out 后面的那个参数. 输入"*"时, 程序正确地将乘号识别为一个字符, if语句中条件为true, 执行对i的赋值i=3*5; 所以输出是正确的. 如果不带引号, 程序不认为乘号*是一个字符, 因此if语句中的条件为false, 不执行对i的赋值. 换言之, 这时i没有被赋值, 输出的是一个随机的数字.
*是个通配符,你在命令行中输入*时,*会被展开成当前目录下所有文件的文件名再传入程序。
广告
小姐的淫靡生活
台湾女神秒杀男人心
美女性爱短片被曝光
售楼小姐隐私潜规则
最大最凶悍的"犬王"
中国大学各校"之最"
相关搜索