2011-02-01 72 views
1

我的程序使用argc和argv []獲取命令行參數。我的問題是如何找到argv [1] [i]的長度。C編程查找長度爲2的二維數組

我的代碼,抓住的argv長度[]

int my_strlen(char input[]){ 
    int len = 0; 
    while(input[len] != '\0'){ 
     ++len; 
    } 
    return len; 
} 

但是當我試圖找到的argv [1] [LEN]我得到一個下標值既不是數組,也不指針: 我嘗試

int my_strlen(char input[]){ 
    int len = 0; 
    while((input[1][len] - '0') != '\0'){ 
     ++len; 
    } 
    return len; 
} 

全碼:

#include <stdio.h> 
#include <math.h> 

int my_strlen(char input[]); 

int main(int argc, char *argv[]){ 
int length = 0; 
length = my_strlen(argv[1]); 
long numberArr[length]; 
int i, j; 

for(i = 0; i < length; i++){ 
    numberArr[i] = argv[1][i] - '0'; 
} 

return 0; 
} 

int my_strlen(char input[]){ 
int len = 0; 
while((input[1][len] - '0') != '\0'){ 
    ++len; 
} 
return len; 
} 

感謝您的幫助提前!

+1

`argv`是一個二維字符數組(`char`),這意味着它是一個一維字符串數組。 – Gabe 2011-02-01 03:58:38

+0

@加貝:謝謝,我在學習C的早期階段,所以既然在C中沒有字符串類型,當人們稱它們爲「字符串」時,我有點困惑。但是謝謝你的幫助! – Grant 2011-02-01 05:05:03

回答

3

我想你對argv內容感到困惑。 OS將通過一些ASCIIZ串,使得調用MY-帶參數的ALA ...

my_program first second third 

...類似於在你的程序如下聲明...

int argc = 4; 
const char* argv[4] = { "my_program", "first", "second", "third" }; 

因此,當你索引到argv[1][i]時,你會得到字符串「first」中的第i個字符。這僅適用於0(產生'f')和5(指向終止NUL字符'\ 0')之間的i值。

因此,沒有二維N * M數組,但是有一個指向數組的指針(char數組)。你可以像在strlen(argv[1])中那樣調用正常的strlen()函數來找出每個參數中的字符數。只有argc告訴你argv中的元素總數。

這有幫助嗎?

+0

好吧,我想我明白了,所以我應該將argv [1]視爲一個字符串並使用strlen(argv [1])來獲取字符串長度?我之前使用過此功能,有時會出現分段錯誤錯誤 – Grant 2011-02-01 04:03:56

1

main中,您將通過argv[1]轉換爲my_strlen。這意味着my_strlen只是收到一個正常的單維字符串。它不需要做input[1][len],只需要input[len]