2016-04-13 41 views
-1

her biri bunun bir komut dizesi char dizisini bir dizeye dönüştürmenin uygun yolu olduğunu kabul ediyor gibi görünüyor.Bu kod aslında ne yapıyor

vector<std::string> params(argv+1, argv+argc); 

ama gerçekten ben Argv yazdırmaya çalıştığınızda [1] dize sadece ilk harfi olduğu için burada neler olduğunu anlayamıyorum. aslında burada neler oluyor. Bu, verilerin geri kalanına götüren bir çeşit işaretçi matematiğidir, sadece argv'ye 2'nin (argc değeri) eklenmesinin, sadece bir argüman için bu dizideki tüm karakterleri alabildiğinden eminim. Argv [1] gibi baskı örneğin

çok

cout << *argv[1]; 

sınama.txt ikinci parametrenin ilk harfi t geri verir. noktadan bunu

cout << argv[1]; 

için Fred için

sayesinde tüm dizeyi çıkmıyor ama hiçbir şekilde bana test ben bu

cout << argv + argc; 

yapabilirsiniz ve argümanlar arasındaki hamle yapmak.

+3

MCVE kraldır. Argv [1] 'i nasıl yazdırıyorsunuz? – SergeyA

+2

Hayır, 'argv [1]' sadece ilk harf değil ... –

+1

Denemeyi deneyin << argv [1] << '\ n'; 'yerine. '' argv [1] 'aslında tek bir karakterdir. –

cevap

5

Kodun, vektörü komut satırından belirteçleri ile doldurduğu anlaşılıyor.

kod the std::vector constructor for sequences kullanılarak ve komut hattı üzerindeki en son bağımsız değişkeni ilk (Program adı sonra) değişken ve birbirine bir yineleyici geçen. doğrulamak için

, şunu deneyin:

for (unsigned int i = 0; i < argc; ++i) 
{ 
    std::cout << "Argument [" << i << "]: " << argv[i] << std::endl; 
} 
std::cout << "\nFrom vector:\n" 
for (unsigned int j = 0; j < params.size(); ++j) 
{ 
    std::cout << "params[" << j << "]: " << params[j] << "\n"; 
}