2015-11-15 70 views
2

我試着去理解文件讀取c++和嘗試讀取不存在故意爲什麼讀一個不存在的文件打印垃圾字符?

//includes ommited 

int main(int argc, char ** argv) 
{ 
     if(argc != 1) 
       throw std::exception(); 
     std::ifstream file(argv[0]); 
     std::string content((std::istream_iterator<char>(file)), std::istream_iterator<char>()); 
     std::cout << content.c_str() << std::endl; 
} 

DEMO

文件它打印出以下幾點:

ELF 

爲什麼它應該是什麼意思?我只是通過這樣做得到UB嗎?由於我是Java編碼器,如果我們嘗試讀取不存在的文件,我預計會拋出一些異常...

回答

5

argv[0]包含您的可執行文件的路徑。

http://www.gnu.org/software/libc/manual/html_node/Program-Arguments.html

程序正在運行的文件名也被包含在載體中作爲第一個元素; argc的值計算這個元素。

只是嘗試打印它的內容:

std::cout << argv[0] << std::endl; 

你可能想使用argv[1]

「ELF」是Executable and Linkable Format的文件頭的開頭。

+0

好的,現在它只是沒有打印任何東西 –

+0

也許是因爲你的情況拋出異常。這也應該是第一種情況下的行爲。 – LogicStuff

+0

@StAntario您應該將參數傳遞給您的可執行文件 - 只需將它追加到Coliru上的'.a.out'後。 –