Re: [問題] 透過dos傳0給main的argv會被當作什麼
感謝大家的說明以及參考下面網頁的內容整理一下
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
12/29 23:45, 2F
→
12/29 23:58,
6年前
, 3F
12/29 23:58, 3F
→
12/29 23:59,
6年前
, 4F
12/29 23:59, 4F
→
12/29 23:59,
6年前
, 5F
12/29 23:59, 5F
→
12/30 00:00,
6年前
, 6F
12/30 00:00, 6F
※ 編輯: jeromeshih (180.177.203.30), 12/30/2017 05:04:31
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):