2015-11-23 40 views
0

我試圖設置一個窗口的命令行環境變量(以幫助自動開始要求用戶輸入一個窗口過程),然後回聲回經由系統()。使用在C「設定/ P」 ++

#include <iostream> 
using namespace std; 

int main() { 
    system("set /p foo= foo="); 
    system("echo %foo%"); 
    system("pause"); 
    return 0; 
} 

一旦運行,我收到這樣的反饋:

富=酒吧

%FOO%

按任意鍵繼續。 。 。

對於程序的工作,我需要接收「酒吧」,%foo%的內容,但這不會發生。

奇怪的是,該代碼工作,如果直接輸入命令行。

C:\Users\JohnDoe>set /p foo= foo= 
foo=bar 

C:\Users\JohnDoe>echo %foo% 
bar 

爲什麼C++代碼不起作用?

編輯:

使用所建議的修改,具體如下:

#include <iostream> 
using namespace std; 

int main() { 
    system("set /p foo=\" Enter foo= \" & echo %foo%"); 
    system("pause"); 
    return 0; 
} 

返回此反饋:

輸入富=酒吧

%FOO%

按任意鍵繼續 。 。 。

使用下面的代碼工作,但打開第二個窗口:

#include <iostream> 
using namespace std; 

int main() { 
    system("set /p foo=\" Enter foo= \" & start echo %foo%"); 
    system("pause"); 
    return 0; 
} 

輸入富=酒吧 按任意鍵繼續。 。 。

然後在第二個窗口:

酒吧

回答

2

system運行命令解釋的新實例。在該進程中設置環境變量對程序自己的進程沒有影響。不幸的是,C++標準庫對環境變量的支持非常有限:只是一個函數getenv

你的目的,在Windows中,您可能會改爲發出像system("set foo=bar & run_that_program");通話。

+0

測試您的建議,更多信息添加到問題。 – werd1002

+0

這不起作用,因爲環境變量('%foo%')的命令行擴展立即發生,*在'set'命令運行之前。 Alf的版本,在其中運行另一個程序,將工作 - 「run_that_program」進程將看到環境變量。 –

0

你可以在你的C程序中直接設置環境變量,使用SetEnvironmentVariable功能。 (當然,可以提示用戶輸入的值使用通常的C I/O函數來設置。)

這種可變應由你開始與系統程序繼承()。