[問題] 透過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