2015-06-10 56 views
0

我找不出導致此問題的原因......感謝任何幫助! 我已經嘗試了很多代碼strlen,但這是唯一一個我可以實現只有1個錯誤。有了這段代碼,我試圖從文件中讀取一個字符串,用空格分隔的單詞將其分開,確定長度然後將單詞和長度輸出給用戶。嘗試使用strlen,但得到錯誤:'strlen'的衝突類型

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

FILE*arquivo; 
char nuks[80]; 
char frase[80]; 

typedef struct node { 
char palavra; 
struct node* esquerda; 
struct node* direita; 
int altura; 
} No; 

size_t strlen(char *nstr) 
{ 
int total=0; 
char str[80]; 
strcpy(str, nstr); 
total = strlen(str); 
printf("|%s| is |%d|", str, total); 
} 

int main() 
{ 
No* raiz = NULL; 
arquivo=fopen("README.txt","r"); 
fgets(nuks, 79, arquivo); 
printf("%s\n",nuks); 

char *parte; 

// Get the first word 
parte = (char*)strtok(nuks, " "); 

// Get the other words 
while(parte != NULL){ 
strlen(parte); 
printf("%s\n", parte); 
parte = (char*)strtok(NULL, " "); 
} 

printf("\n\n"); 
system("pause"); 
return 0; 
} 
+4

使用其他名稱。例如'void print_strlen(char * nstr)'而不是'size_t strlen(char * nstr)' – BLUEPIXY

+0

嘗試命名char數組除了'str'之外的東西嗎?這可能已經確定了。 – cehnehdeh

回答

1

要調用一個名爲函數strlen的()爲功能也被命名的strlen(),這使得它遞歸,更糟糕的是,無限遞歸! 除此之外,您不需要爲了確定其長度而將nstr的本地副本導入到str中。 最後,是否有任何理由不使用string.h中聲明的標準strlen()函數?

0

size_t strlen(const char *)已經在<string.h>中定義,因此有衝突。
您應該爲您的功能選擇另一個功能名稱。

0

1>標準strlen與本地strlen相沖突。 (可能衝突錯誤在這裏)

2>功能沒有正確編碼,遞歸調用本身沒有任何退出點。

第一個可以忽略,因爲局部定義會超載string.h中的那個 但問題出在函數中。

0

注意,在你的代碼,你已經包括了C字符串庫

#include <string.h> 

其具有的功能

size_t strlen(const char *str) 

返回傳遞給函數的字符串的長度。

然而,在你的代碼,你試圖覆蓋功能

size_t strlen(char *nstr) 

這將導致混亂當C嘗試編譯您的文件。嘗試爲您的功能使用不同的名稱。例如:

/* This function prints the length of string */ 
void print_strlen(char *nstr) { 
    int total=0; 
    total = strlen(nstr); 
    printf("|%s| is |%d|", nstr, total); 
} 

而且,請注意,在你的代碼,你定義

char str[80]; 

,然後複製輸入NSTR到海峽。

只要字符串的長度不超過79就可以了(注意字符串有一個空終止符'\ 0')。但是一旦你的字符串長度超過了這個限制,你的輸出將會有點有趣!