2015-02-05 83 views
-1

代碼:計算的參數的長度

int my_strlen(char *string){ 
    int i; 
    for(i = 0; string[i] != '\0'; i++); 
    return i; 
} 
int main(int argc, char* argv[]){ 
    int length; 
    for(int i = 1; i < argc; i++){ 
     length = my_strlen(argv[1]); 

    } 
    printf("Length of the command line args: %d\n", length); 
} 

輸出:

$ ./a.out guy oneguy 
$ Length of the command line args: 6 

出於某種原因,它只能算最後的參數,而忽略了其他。我期待得到10(長度)。

任何幫助將是偉大的。

謝謝。

+1

初始化'length'爲零並改變'length = my_strlen(argv [i]);'to'length + = my_strlen (argv [i]);'也注意從'1'到'i'的變化。 – DaV 2015-02-05 16:29:37

+0

「出於某種原因」?原因在於,這正是您在代碼中表達的想法。 :) – unwind 2015-02-05 16:36:29

+0

有什麼理由你不使用'strlen'? – Axalo 2015-02-05 16:37:51

回答

0
int length = 0; // Don't forget to initialize to 0. 
for(int i = 0; i < argc; i++) { // Start from index 0, not 1, to loop through every argument. 
    length += my_strlen(argv[i]); // Use i as index to argv to access each argument one by one. 
            // Add result of my_strlen to length. 
} 
+0

哦,我從1開始的原因,是因爲第一個參數。例如,'$ ./a.out args1 args2 \ 0'所以第一個索引[0]是a.out,所以我忽略了它。所以我從索引1開始。 – user4533813 2015-02-05 16:56:02

+0

@ user4533813哦,你是對的,完全忘了那個。那就是1。 – emlai 2015-02-05 17:01:12

0
  • 點1.你永遠不加入length以前的值到下一個值(一個或多個)。

  • 第2點。您從未初始化length

  • 第3點。對於所有i的值,您使用的是argv[1]而不是argv[i]

  • 第4點,輸入./a.out guy oneguy,您將如何獲得10

使用類似

length = 0;  // initialize 

length += my_strlen(argv[i]); // add up the length, use i as index. 

PS - 我不認爲二進制文件的名稱應該算作命令行參數,所以從索引1這對我來說是正確的,但最後,這取決於你。 [這裏沒有對或錯,根據_print聲明] :-)

+0

'strlen(「guy oneguy」)'是10. – mch 2015-02-05 16:52:32

+0

@mch先生,但不是'strlen(「guy」)+ strlen(「oneguy」)'是我們在這裏查看的情況,至少OP的邏輯? – 2015-02-05 16:56:43

+0

@SouravGhosh我確實使用strlen來獲得樂趣。我一直在得到9而不是10.我做了:'length + = strlen(argv [i]);'在forloop下主要。我將int長度更改爲size_t長度。 – user4533813 2015-02-05 17:17:29