2011-04-16 84 views
0

我有一個程序,但收到錯誤消息。請幫助我。錯誤:'strlen'的衝突類型

#include <stdio.h> 
#include <string.h> 
int print_strlen(char s[]); 

main() 
{ 
    char s[20]; 
    printf("Enter the string:\n"); 
    scanf("%s\n", s); 
} 

int print_strlen(char s[]) 
{ 
    int l; 
    l = strlen(s); 
    printf("Length of the string is: %s\n", l); 
} 
+2

錯誤信息是...?編輯:沒關係..它是在主題行。你真的認爲當你開始「解決這個問題」的主題時,人們想要幫助你嗎? – 2011-04-16 06:44:39

+0

對不起,先生 – Jashid 2011-04-16 07:02:36

回答

1

strlen已經在string.h中定義了,因此錯誤。將你的函數名改爲別的。

+0

謝謝,這是行得通的 – Jashid 2011-04-16 06:51:36

0

打電話給你的其他功能,已經有strlen()string.h中聲明。

+0

好的一個和一個很好的博客網站提問 – Jashid 2011-04-16 06:52:34

0

strlen是在<string.h>中聲明的標準函數,您試圖用另一個原型(標準函數採用char const*而不是char*)來定義它。

0

你的錯誤信息是什麼?

你不應該命名你的函數strlen;已經有一個strlen函數,並且您知道這將不起作用,因爲您在strlen函數中使用了真實的strlen函數。叫它別的東西,比如print_strlen。此外,如果您實際上沒有從print_strlen返回任何內容,請使用void而不是int

不直接相關的其他問題包括明顯的緩衝區溢出;如果您輸入的文本長度超過20個字節?

+0

好的一個和一個很好的博客網站提出問題 – Jashid 2011-04-16 06:53:05

5

不要試圖自己原型strlen。只包括<string.h>,並使用它已有的原型(和功能)。不要試圖用同一個名字來編寫自己的函數(或者至少正式的用str開頭的其他名字)。

它現在看到的衝突類型是因爲標準要求strlen返回size_t而不是int

另外請注意,您現在命名爲strlen的函數是無限遞歸的 - 它顯然會嘗試調用標準的strlen,它最終會自動調用,因爲它無條件地執行它,它會永遠保持遞歸(或者直到系統終止它才能溢出堆棧)。

+0

你認爲幫助 – Jashid 2011-04-16 06:52:03

0

strlen是string.h中爲你提供的一個函數,爲什麼要重新發明輪子?

#include <stdio.h> 
#include <string.h> 
main() 
{ 
     char s[20]; 
     printf("Enter the string:\n"); 
     scanf("%s\n",s); 
     printf("Length of the string is: %s\n",strlen(s)); 
} 

會工作得很好。

+0

我知道。但我試圖以遞歸形式實現它。所以請從錯誤修改我的程序 – Jashid 2011-04-16 06:53:56

+0

您的程序沒有任何遞歸。如果您在遞歸方面苦苦掙扎,請提出一個新問題,對問題進行適當解釋,而不是這個錯誤。 – BugFinder 2011-04-16 07:05:04

+0

「非常好」,格式字符串中的「%s」除外(從問題中複製)。 – 2011-04-16 20:18:42