[問題] 透過dos傳0給main的argv會被當作什麼

看板C_and_CPP作者 (以謹慎態度來面對問題)時間6年前 (2017/12/28 17:57), 6年前編輯推噓1(2137)
留言40則, 12人參與, 6年前最新討論串1/2 (看更多)
一般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

12/28 18:20, 6年前 , 1F
你所謂的「傳入」該不會是 main(1, 0) 這樣吧
12/28 18:20, 1F

12/28 18:21, 6年前 , 2F
你在講三小,可以舉個實際例子嗎
12/28 18:21, 2F

12/28 18:21, 6年前 , 3F
正常不是都變成字串嗎
12/28 18:21, 3F

12/28 18:23, 6年前 , 4F
我也猜該不會是一樓那樣
12/28 18:23, 4F
※ 編輯: jeromeshih (114.137.198.120), 12/28/2017 18:29:11

12/28 18:30, 6年前 , 5F
..... 這個狀況 argv[1] 是字串 "0" 謝謝
12/28 18:30, 5F

12/28 18:30, 6年前 , 6F
你寫個簡單程式去 for (...) printf(); 不就知道了嗎
12/28 18:30, 6F

12/28 18:36, 6年前 , 7F
怎樣都會是"0\0"啊 = = 怎麼會覺得是"\0"
12/28 18:36, 7F

12/28 18:37, 6年前 , 8F
不然你覺得const char* a = "0";會是啥....
12/28 18:37, 8F

12/28 18:44, 6年前 , 9F
你有實際跑過嗎?
12/28 18:44, 9F

12/28 18:52, 6年前 , 10F
另外你注意一下 事實上第二個參數是char** 不是char*
12/28 18:52, 10F

12/28 18:52, 6年前 , 11F
char* argv[] = char** argv, 仔細想想為什麼
12/28 18:52, 11F

12/28 20:44, 6年前 , 12F
5F,這個問題我之前就這樣想,但是遇到的情況,printf
12/28 20:44, 12F

12/28 20:44, 6年前 , 13F
出來是0,但如果用判斷式argv[1]==“0”,會無法進入
12/28 20:44, 13F

12/28 20:46, 6年前 , 14F
7F的情況我確認一下,因為之前沒想到“0\0”
12/28 20:46, 14F

12/28 20:46, 6年前 , 15F
你知道"0"實際上是啥嗎......這樣是在比字串位址耶
12/28 20:46, 15F

12/28 21:22, 6年前 , 16F
寫C在處理字串很多時候要處理很細節的東西,字串不能這樣比
12/28 21:22, 16F

12/28 21:22, 6年前 , 17F
用strcmp去比較…
12/28 21:22, 17F

12/28 21:23, 6年前 , 18F
其他更高階的語言可以這樣,C不行
12/28 21:23, 18F

12/28 21:44, 6年前 , 19F
照發文格式打到底有多困難?
12/28 21:44, 19F

12/28 21:45, 6年前 , 20F
每個問問題的都不放程式碼和輸出結果
12/28 21:45, 20F

12/28 21:58, 6年前 , 21F
的確有的程式語言,0=="0"=='0'==`0`,但這裡是C++版
12/28 21:58, 21F

12/28 22:21, 6年前 , 22F
他找的連結講的是另一個無關的東西
12/28 22:21, 22F

12/28 22:44, 6年前 , 23F
老實講寫其他語言寫久了 碰到C字串 誤用==似乎還滿合理
12/28 22:44, 23F

12/28 22:45, 6年前 , 24F
btw, 問題就在於你不該== 用strcmp吧
12/28 22:45, 24F

12/28 22:45, 6年前 , 25F
其他就別亂猜了,你上面那些猜測都不是對的 ...
12/28 22:45, 25F

12/28 23:32, 6年前 , 26F
為什麼會說 char* argv[] 跟 char** argv 是一樣的?
12/28 23:32, 26F

12/28 23:47, 6年前 , 27F
因為陣列不能作為函數參數
12/28 23:47, 27F

12/29 00:01, 6年前 , 28F
我知道參數宣告陣列時C會傳指標進來,用起一樣,但是能
12/29 00:01, 28F

12/29 00:01, 6年前 , 29F
因為這樣就說這兩個type相等嗎?
12/29 00:01, 29F

12/29 00:09, 6年前 , 30F
能,C++ primer有講,函數參數讓你宣告[]只是語法糖
12/29 00:09, 30F

12/29 00:09, 6年前 , 31F
而已,就說函數不吃陣列了,怎麼可能會有參數的類型是
12/29 00:09, 31F

12/29 00:09, 6年前 , 32F
陣列
12/29 00:09, 32F

12/29 00:10, 6年前 , 33F
就算寫成char *argv[1],其語意也是等價
12/29 00:10, 33F

12/29 00:13, 6年前 , 34F
那寫 char * arg[10],然後sizeof(arg)會是多少呢?
12/29 00:13, 34F

12/29 00:16, 6年前 , 35F
[]內的數字寫多少結果都一樣,都是char*的大小
12/29 00:16, 35F

12/29 00:18, 6年前 , 36F
瞭解了,謝謝你~
12/29 00:18, 36F

12/29 00:22, 6年前 , 37F
上面我少打一個*,是char**的大小
12/29 00:22, 37F

12/29 09:14, 6年前 , 38F
啊,雖然陣列不能作為參數,不過陣列的指標或參考是可
12/29 09:14, 38F

12/29 09:15, 6年前 , 39F
以的
12/29 09:15, 39F

12/29 09:18, 6年前 , 40F
因不能copy的是陣列,非其指標或參考
12/29 09:18, 40F
文章代碼(AID): #1QHC0Fbt (C_and_CPP)
文章代碼(AID): #1QHC0Fbt (C_and_CPP)