看板 C_and_CPP 關於我們 聯絡資訊
一般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都會有這種現象 ----- Sent from JPTT on my Sony G8142. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.198.120 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1514455055.A.977.html
bibo9901: 你所謂的「傳入」該不會是 main(1, 0) 這樣吧 12/28 18:20
Schottky: 你在講三小,可以舉個實際例子嗎 12/28 18:21
Schottky: 正常不是都變成字串嗎 12/28 18:21
LPH66: 我也猜該不會是一樓那樣 12/28 18:23
※ 編輯: jeromeshih (114.137.198.120), 12/28/2017 18:29:11
Schottky: ..... 這個狀況 argv[1] 是字串 "0" 謝謝 12/28 18:30
Schottky: 你寫個簡單程式去 for (...) printf(); 不就知道了嗎 12/28 18:30
Killercat: 怎樣都會是"0\0"啊 = = 怎麼會覺得是"\0" 12/28 18:36
Killercat: 不然你覺得const char* a = "0";會是啥.... 12/28 18:37
james732: 你有實際跑過嗎? 12/28 18:44
Killercat: 另外你注意一下 事實上第二個參數是char** 不是char* 12/28 18:52
Killercat: char* argv[] = char** argv, 仔細想想為什麼 12/28 18:52
jeromeshih: 5F,這個問題我之前就這樣想,但是遇到的情況,printf 12/28 20:44
jeromeshih: 出來是0,但如果用判斷式argv[1]==“0”,會無法進入 12/28 20:44
jeromeshih: 7F的情況我確認一下,因為之前沒想到“0\0” 12/28 20:46
loveflames: 你知道"0"實際上是啥嗎......這樣是在比字串位址耶 12/28 20:46
cphe: 寫C在處理字串很多時候要處理很細節的東西,字串不能這樣比 12/28 21:22
school4303: 用strcmp去比較… 12/28 21:22
cphe: 其他更高階的語言可以這樣,C不行 12/28 21:23
Ommm5566: 照發文格式打到底有多困難? 12/28 21:44
Ommm5566: 每個問問題的都不放程式碼和輸出結果 12/28 21:45
stupid0319: 的確有的程式語言,0=="0"=='0'==`0`,但這裡是C++版 12/28 21:58
loveflames: 他找的連結講的是另一個無關的東西 12/28 22:21
Killercat: 老實講寫其他語言寫久了 碰到C字串 誤用==似乎還滿合理 12/28 22:44
Killercat: btw, 問題就在於你不該== 用strcmp吧 12/28 22:45
Killercat: 其他就別亂猜了,你上面那些猜測都不是對的 ... 12/28 22:45
Lipraxde: 為什麼會說 char* argv[] 跟 char** argv 是一樣的? 12/28 23:32
loveflames: 因為陣列不能作為函數參數 12/28 23:47
Lipraxde: 我知道參數宣告陣列時C會傳指標進來,用起一樣,但是能 12/29 00:01
Lipraxde: 因為這樣就說這兩個type相等嗎? 12/29 00:01
loveflames: 能,C++ primer有講,函數參數讓你宣告[]只是語法糖 12/29 00:09
loveflames: 而已,就說函數不吃陣列了,怎麼可能會有參數的類型是 12/29 00:09
loveflames: 陣列 12/29 00:09
loveflames: 就算寫成char *argv[1],其語意也是等價 12/29 00:10
Lipraxde: 那寫 char * arg[10],然後sizeof(arg)會是多少呢? 12/29 00:13
loveflames: []內的數字寫多少結果都一樣,都是char*的大小 12/29 00:16
Lipraxde: 瞭解了,謝謝你~ 12/29 00:18
loveflames: 上面我少打一個*,是char**的大小 12/29 00:22
loveflames: 啊,雖然陣列不能作為參數,不過陣列的指標或參考是可 12/29 09:14
loveflames: 以的 12/29 09:15
loveflames: 因不能copy的是陣列,非其指標或參考 12/29 09:18