一般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) 这样吧
你在讲三小,可以举个实际例子吗正常不是都变成字串吗
作者:
LPH66 (-6.2598534e+18f)
2017-12-28 18:23:00我也猜该不会是一楼那样
..... 这个状况 argv[1] 是字串 "0" 谢谢你写个简单程式去 for (...) printf(); 不就知道了吗
怎样都会是"0\0"啊 = = 怎么会觉得是"\0"不然你觉得const char* a = "0";会是啥....
另外你注意一下 事实上第二个参数是char** 不是char*char* argv[] = char** argv, 仔细想想为什么
5F,这个问题我之前就这样想,但是遇到的情况,printf出来是0,但如果用判断式argv[1]==“0”,会无法进入7F的情况我确认一下,因为之前没想到“0\0”
你知道"0"实际上是啥吗......这样是在比字串位址耶
作者:
cphe (魔鬼藏在垃圾筒里)
2017-12-28 21:22:00写C在处理字串很多时候要处理很细节的东西,字串不能这样比
作者:
cphe (魔鬼藏在垃圾筒里)
2017-12-28 21:23:00其他更高阶的语言可以这样,C不行
作者:
Ommm5566 (56天團)
2017-12-28 21:44:00照发文格式打到底有多困难?每个问问题的都不放程式码和输出结果
的确有的程式语言,0=="0"=='0'==`0`,但这里是C++版
老实讲写其他语言写久了 碰到C字串 误用==似乎还满合理btw, 问题就在于你不该== 用strcmp吧其他就别乱猜了,你上面那些猜测都不是对的 ...
作者:
Lipraxde (Lipraxde)
2017-12-28 23:32:00为什么会说 char* argv[] 跟 char** argv 是一样的?
作者:
Lipraxde (Lipraxde)
2017-12-29 00:01:00我知道参数宣告阵列时C会传指标进来,用起一样,但是能因为这样就说这两个type相等吗?
能,C++ primer有讲,函数参数让你宣告[]只是语法糖而已,就说函数不吃阵列了,怎么可能会有参数的类型是阵列就算写成char *argv[1],其语意也是等价
作者:
Lipraxde (Lipraxde)
2017-12-29 00:13:00那写 char * arg[10],然后sizeof(arg)会是多少呢?
[]内的数字写多少结果都一样,都是char*的大小
作者:
Lipraxde (Lipraxde)
2017-12-29 00:18:00了解了,谢谢你~