[问题] 透过dos传0给main的argv会被当作什么

楼主: jeromeshih (以谨慎态度来面对问题)   2017-12-28 17:57:28
一般main的argv会被当作命令列引数
假设程式编译好为
test.exe
main程式
int main(int argc, char* argv[])
执行方式
dos视窗输入
#test.exe 0
在argv[0]是“test.exe”
但是在argv[1]收到会是什么?
因为如果传0给argv似乎不会被当作“0”或\0
′0′因为是字符当然也不符合
后来有查了一下
https://goo.gl/z9gYgt
似乎char* 0反而会被当作
null-pointer value of type char *
想问一下这算是C++的特殊情况吗,还是遇到0都会有这种现象
作者: bibo9901 (function(){})()   2017-12-28 18:20:00
你所谓的“传入”该不会是 main(1, 0) 这样吧
作者: Schottky (顺风相送)   2017-12-28 18:21:00
你在讲三小,可以举个实际例子吗正常不是都变成字串吗
作者: LPH66 (-6.2598534e+18f)   2017-12-28 18:23:00
我也猜该不会是一楼那样
作者: Schottky (顺风相送)   2017-12-28 18:30:00
..... 这个状况 argv[1] 是字串 "0" 谢谢你写个简单程式去 for (...) printf(); 不就知道了吗
作者: Killercat (杀人猫™)   2017-12-28 18:36:00
怎样都会是"0\0"啊 = = 怎么会觉得是"\0"不然你觉得const char* a = "0";会是啥....
作者: james732 (好人超)   2017-12-28 18:44:00
你有实际跑过吗?
作者: Killercat (杀人猫™)   2017-12-28 18:52:00
另外你注意一下 事实上第二个参数是char** 不是char*char* argv[] = char** argv, 仔细想想为什么
楼主: jeromeshih (以谨慎态度来面对问题)   2017-12-28 20:44:00
5F,这个问题我之前就这样想,但是遇到的情况,printf出来是0,但如果用判断式argv[1]==“0”,会无法进入7F的情况我确认一下,因为之前没想到“0\0”
作者: loveflames (咕啾咕啾魔法阵)   2017-12-28 20:46:00
你知道"0"实际上是啥吗......这样是在比字串位址耶
作者: cphe (魔鬼藏在垃圾筒里)   2017-12-28 21:22:00
写C在处理字串很多时候要处理很细节的东西,字串不能这样比
作者: school4303 (某爬虫类)   2017-12-28 21:22:00
用strcmp去比较…
作者: cphe (魔鬼藏在垃圾筒里)   2017-12-28 21:23:00
其他更高阶的语言可以这样,C不行
作者: Ommm5566 (56天團)   2017-12-28 21:44:00
照发文格式打到底有多困难?每个问问题的都不放程式码和输出结果
作者: stupid0319 (征女友)   2017-12-28 21:58:00
的确有的程式语言,0=="0"=='0'==`0`,但这里是C++版
作者: loveflames (咕啾咕啾魔法阵)   2017-12-28 22:21:00
他找的连结讲的是另一个无关的东西
作者: Killercat (杀人猫™)   2017-12-28 22:44:00
老实讲写其他语言写久了 碰到C字串 误用==似乎还满合理btw, 问题就在于你不该== 用strcmp吧其他就别乱猜了,你上面那些猜测都不是对的 ...
作者: Lipraxde (Lipraxde)   2017-12-28 23:32:00
为什么会说 char* argv[] 跟 char** argv 是一样的?
作者: loveflames (咕啾咕啾魔法阵)   2017-12-28 23:47:00
因为阵列不能作为函数参数
作者: Lipraxde (Lipraxde)   2017-12-29 00:01:00
我知道参数宣告阵列时C会传指标进来,用起一样,但是能因为这样就说这两个type相等吗?
作者: loveflames (咕啾咕啾魔法阵)   2017-12-29 00:09:00
能,C++ primer有讲,函数参数让你宣告[]只是语法糖而已,就说函数不吃阵列了,怎么可能会有参数的类型是阵列就算写成char *argv[1],其语意也是等价
作者: Lipraxde (Lipraxde)   2017-12-29 00:13:00
那写 char * arg[10],然后sizeof(arg)会是多少呢?
作者: loveflames (咕啾咕啾魔法阵)   2017-12-29 00:16:00
[]内的数字写多少结果都一样,都是char*的大小
作者: Lipraxde (Lipraxde)   2017-12-29 00:18:00
了解了,谢谢你~
作者: loveflames (咕啾咕啾魔法阵)   2017-12-29 00:22:00
上面我少打一个*,是char**的大小

Links booklink

Contact Us: admin [ a t ] ucptt.com