一般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瞭解了,謝謝你~