argv

2016-04-07 28 views
-3

Bu nedenle, bu atamayı (bir dizeyi girin ve dizelerin sayısını görüntüler) burada argv [0] değeri ve argv [3] değerlerinin neden değiştiğini açıklamam gerekir. Bu yüzden programa adım attığımda (string girişim "şimdi kahverengi ineği çalıştır" argv [0] dizin dizinim olarak başlıyor ("/ home/013/w/wn /% $% $% #%/Assignment4/p2 "). Ve sonra argv [3]" şimdi "olarak başlıyor.Program çalışırken, bu değişkenlerin neden değiştiğini anlamıyorum, çünkü" şimdi "dizesi argv [2] 'de olmalı, değil mi? Program başında argv [] dizi sonunda her şeyi tekabül derler, ama neden olmasın Burada argv

kod:?

#include <stdio.h> 

/* print a given string and a number in a pre-determined format. */ 
void 
print_string(int num, char* string) 
{ 
    printf("String '%d' - '%s'\n", num, string); 
} 

int 
main(int argc, char* argv[]) 
{ 
    int i; 

    /* check for command line arguments */ 
    if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */ 
     printf("Usage: %s [<string> ...]\n", argv[0]); 
     return(1); 
    } 

    /* loop over all strings, print them one by one */ 
    for (argc--,argv++,i=0 ; argc > 0; argc--,argv++,i++) { 
     print_string(i, argv[0]); /* function call */ 
    } 

    printf("Total number of strings: %d\n", i); 

    return 0; 
} 
+7

'argv [0]', programı çağırmak için kullanılan dosya adıdır, gerçek komut satırı argümanları 'argv [1 ...]' –

+0

@BenVoigt programında saklanır. – Nacho

+2

Program çalışırken değişiyor çünkü, genellikle kaşınan bir stil olan parametrelerinizi değiştirirsiniz ('argc -, argv ++'). –

cevap

1

dizi endeksleri 0 başlar ve argv ilk eleman yoludur çalıştırılan dosyanın, örneğin ikili dosyanızı şu şekilde çalıştırıyorsanız:

./test run how now brown cow 

Sen argv aşağıdaki unsurları alacak: Gördüğünüz gibi

argv[0] = "./test" 
argv[1] = "run" 
argv[2] = "how" 
argv[3] = "now" 
argv[4] = "brown" 
argv[5] = "cow" 

, bu toplam doğru olduğunu şimdi on 3rd değil 2 eleman üzerindedir.