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

看板C_and_CPP作者 (以謹慎態度來面對問題)時間6年前 (2017/12/29 22:31), 6年前編輯推噓1(105)
留言6則, 4人參與, 6年前最新討論串2/2 (看更多)
感謝大家的說明以及參考下面網頁的內容整理一下 https://goo.gl/iB8Ha4 原本問題程式簡述如下 int main(int argc, char* argv[]) { if((argv[1]=='0')||(argv[1]=="0")) {printf(“enter\n”)} return 0; } 編譯成test.exe dos視窗輸入 #test.exe 0 都無法顯示預期的enter內容 原因如下 1.argv[1]=='0' 比較pointer和字元 2.argv[1]=="0" 比較兩個pointer 正確方式應該如下 a.strcmp((argv[1],"0")==0) b.std::string(argv[1])=="0" c.argv[1]==std::string("0") 上面三者都能輸出預期的結果 ※ 引述《jeromeshih (以謹慎態度來面對問題)》之銘言: : 一般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. ----- Sent from JPTT on my Sony G8142. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.229.100 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1514557902.A.0C0.html

12/29 23:32, 6年前 , 1F
喔天阿 你真的在程式裡面打全形引號嗎
12/29 23:32, 1F

12/29 23:45, 6年前 , 2F
要不要試試 argv[1][0] == '0' 字元比字元才公平XDD
12/29 23:45, 2F

12/29 23:58, 6年前 , 3F
1F,原諒一下手機鍵盤啊
12/29 23:58, 3F

12/29 23:59, 6年前 , 4F

12/29 23:59, 6年前 , 5F

12/30 00:00, 6年前 , 6F
你得學著查這個,很方便的
12/30 00:00, 6F
※ 編輯: jeromeshih (180.177.203.30), 12/30/2017 05:04:31
文章代碼(AID): #1QHb7E30 (C_and_CPP)
文章代碼(AID): #1QHb7E30 (C_and_CPP)