2016-03-07 50 views
2

我試圖使該會採取網站信息,然後將其提供給system()啓動網站的程序。我知道像(\, ",')這樣的字符不會直接輸入到輸出,所以我使用了轉義序列。系統()函數,並調用它從IE瀏覽器,DEVC++

我寫了這個程序,但在命令提示符下只是不肯走過去C:\路徑。但是,如果我複製粘貼我的程序顯示的命令,Internet Explorer將啓動。但是這種情況並不適用於我的計劃。有人可以告訴我錯誤在哪裏嗎?

這裏是我的代碼:

#include<iostream> 
#include<cstdlib> 
using namespace std; 
int main() 
{ 

    cout<<"Please enter the website you wish to visit: "; 
    string website,web; 
    cin>>web; 
    web= " " + web; 
    website = "\"%ProgramFiles%\\Internet Explorer\\iexplore\""+web; 
    cout<<"\n"<<website<<endl<<endl<<endl; 
    system(website.c_str()); 
    return 0; 
} 

回答

1

通過它在雙雙引號

website = "\"\"%ProgramFiles%\\Internet Explorer\\iexplore\"\""+web; 

system("something")調用實際運行在類似(但可能不是相同)cmd /c something的方式命令解釋cmd。這在命令名稱中有空格時會產生影響,請參閱此例。我無法確切知道爲什麼單雙引號在沒有涉及環境變量的情況下工作,並且無法正常工作,但實際上雙雙引號確實有效。

如果要啓動用戶的首選瀏覽器,考慮調用

system("start http://" + websitename); 

代替。

+0

嘿。是的,增加了一對額外的「工作:D。我真的很想知道爲什麼這個工程,爲什麼單身不壽...我會感謝任何人誰可以爲此闡明。此外,我嘗試使用第二種方法,但編譯器給了我這個錯誤:[錯誤]無法將'std :: basic_string '轉換爲'const char *'參數'1'爲'int system(const char *)'拋開一切,非常感謝,這讓我有了很多的見解 – Tribulation

2

您所使用的環境變量,的%ProgramFiles%,在system命令行;這些特定於MS-DOS提示環境,並且通常在system實現中不可用。

我建議更換與完整路徑,如\ 「C:\ Program Files文件\的Internet Explorer \ IEXPLORE \」,並看看是否能工程。

如果可行,那麼您的實現不會像完整的命令提示符那樣隱式地替換環境變量,因此您需要單獨查詢環境變量並在運行system之前構建路徑。一種可能的方式見getenv(我不確定mingw32支持什麼,所以你也可以有其他的選擇)。

如果這不能解決問題,我建議檢查是否可以啓動一些比較簡單的操作,比如notepad.exe,以驗證是否沒有干擾啓動應用程序(如環境路徑或權限)。

+0

這是不完全正確。環境變量由shell解釋,'system'通過shell運行。試試'system(「echo%ProgramFiles%」)並看看。 –

+0

謝謝。我嘗試使用%programfiles%的原因是因爲我想打開Internet Explorer,無論它在哪個驅動器中(某些人,包括我自己,在D :,或F:等中安裝Windows)。我確實嘗試了明確的道路,而且確實有效。我將研究如何使用getenv來獲得必要的路徑。謝謝。 – Tribulation

0

先獲取該環境變量值。

#include <iostream> 
#include <ShlObj.h> 

int main() { 
    char pathToPf[MAX_PATH]; 
    if (S_OK == SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, pathToPf)) 
     std::cout << pathToPf << std::endl; 
    return 0; 
} 

See SHGetFolderPath documentation...

請注意,我是懶惰,使用此功能的ASCII版本。使用它沒有一個後綴和處理交談;)

+0

你好,我不是很熟悉「ShlObj.h」頭文件,它的功能是什麼,我想我必須先詳細瞭解它(我保證,這個週末,已經把它添加到我的學習清單中),看到我是一個剛剛開始的新學生,感謝您的投入,雖然我沒有完全理解。 – Tribulation

+0

_%ProgramFiles%_的問題是shell會用_C:\ Program Files_替換它,並且使它很難使用它。你必須添加雙引號, etc ...'SHGetFolderPath()'會給你一個包含程序文件路徑的char []。您可以在2.參數中使用其他標誌,例如:'CSIDL_APPDATA'。在這種情況下,它將返回類似於:_C:\ Users \ \ AppData _...或任何在您的** PATH **中。 – NMD