2012-09-25 128 views
1

我有關於這個主題的前一個問題,但我想出了這個錯誤,我似乎沒有注意到它有什麼問題。我認爲這可能是因爲將參數分配給字符串。缺少聲明標識符

編輯:

void replace(char* string_a, char* string_b, char* string_f) 
{ 
} 

int main(int argc, char *argv[]) 
{ 
    if(argc < 4) 
    { 
     printf("Not enough arguments\n"); 
     return 0; 
    } 

    replace(argv[1],argv[2],argv[3]); 
} 

奇怪的是,主要功能必須更換功能或編譯器會抱怨之後。我必須查明原因。

+2

這只是不是C是如何工作的。你最容易找到一本好書,並自己學習基礎知識。 –

+0

我實際上是通過Kernighan閱讀C編程語言,但我似乎無法找到答案。也許你可以告訴我什麼是錯的?我會很感激。 – user1072706

+0

很多都是錯誤的,並且只需要一個簡短的答案來解釋 - 任何明智的答案都等於某種C教程。對於初學者,您不能在其他函數中聲明函數。 –

回答

3

這不是有效的C:

char string_a[] = argv[1]; 

在編譯時,編譯器不能計算出多少內存應該如何需要存儲argv[1]。所以這是不可能的。

但是,argv[1]是一個指針,您可以將正確類型的變量指定給指針。所以,你可以這樣做:

const char *string_a = argv[1]; 

然而,無論argv[1]string_a由完全相同的一塊內存,現在支持。 (這個內存可能是隻讀的)。

+0

我修復了指針問題,但我仍然收到完全相同的錯誤。 – user1072706

+0

再看一遍:'void replace(argv [1],argv [2],argv [3]){'不是你如何做函數聲明。函數聲明中的參數應該是類型的......我個人是@Kerrek SB評論的粉絲。這是關於C的非常基本的知識,任何書都會涉及。 –

+0

這是我以前的帖子http://stackoverflow.com/questions/12585398/how-to-pass-arguments-from-terminal-to-a-function/12585864#12585864 – user1072706

0

做這樣的事情:

int main(int argc, char *argv[]) { 
    if(argc < 4) { 
     printf("Not enough arguments\n"); 
     return 0; 
    } 

    string s=argv[1]; 
    string s1=argv[2]; 
    string s2=argv[3]; 
    replace(s,s1,s2);  
} 

void replace(s,s1,s2) { 
    //statements 
} 
+0

這是C++和C被提及。此外,你仍然會有一個錯誤的函數聲明。 –

+0

我決定做類似的事情。但是,只需傳遞所有參數並聲明正確的類型替換並替換主函數。希望它有效。 – user1072706