2016-03-11 54 views
0

我收到了一堆指針錯誤,指針並不完全是我最強烈的一點。我的大部分錯誤都與傳遞參數有關。從不兼容指針類型[默認啓用]傳遞參數2'search_and_count'

的錯誤是:

HW5_mkhan44.c:在函數 '主':HW5_mkhan44.c:31:3:警告: 從不相容指針 類型傳遞 'search_and_count' 的參數1 [由啓用默認]

HW5_mkhan44.c:11:6:注:預期 '結構FILE *',但參數是 類型 '結構FILE **' 的

HW5_mkhan44.c:31:3:警告:傳遞參數2'search_and_count' 從兼容的指針類型[默認啓用]

HW5_mkhan44.c:11:6:注:預期 '爲const char *',但參數是 類型的 '字符*(*)[100]'

HW5_mkhan44.c:31:3:警告:傳遞來自兼容的指針類型 'search_and_count' 的參數3 [默認啓用]

HW5_mkhan44.c:11:6:注:預期 '詮釋*',但參數是 'int **'

HW5_mkhan44.c:31:3:warnin G:從兼容的指針類型傳遞的 'search_and_count' 參數4 [啓用默認]

HW5_mkhan44.c:11:6:注:預期 '詮釋*',但參數是 類型的 '詮釋**'

這是代碼:

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

int word_search(const char *word, const char *str); 
int character_count(const char *curr_str); 
void search_and_count(FILE *fpter, const char *c, int *len, int *result); 

int main(void) 
{ 
     FILE *fileptr; 
     char filename[100]; 
     char* word[100]; 
     int *length; 
     int *num; 

     printf("Please input the text file name: "); 
     scanf("%s", filename); 

     fileptr = fopen(filename, "r"); 

     if(fileptr == NULL) 
       printf("File does not exist\n"); 
     else{ 
       printf("Please enter a word to search: "); 
       scanf("%s", word); 
       search_and_count(&fileptr, &word, &length, &num); 

       if(*num == 0){ 
         printf("Word exists in file"); 
         printf("There are %d characters in file", *length); 
       } 
       else 
         printf("Word does not exist in file"); 
     } 
     fclose(fileptr); 

     return 0; 
} 

int word_search(const char *word,const char *str) 
{ 
     int num; 
    if(strcmp(word, str) == 0){ 
       num = 0; 
       return(num); 
     } 
     else{ 
       num = 1; 
       return(num); 
     } 
} 

int character_count(const char *current_str) 
{ 
     int word_length; 

     word_length = strlen(current_str); 

     return(word_length); 
} 

void search_and_count(FILE *fpter, const char *c, int *len, int *result) 
{ 
     char line[120]; 

     while(fgets(line, sizeof(line), fpter)){ 
       char* t = strtok(line, " "); 
       *len = word_search(c, t); 
       *result = character_count(t); 
     } 
} 

回答

3

這看起來是什麼樣子的語法錯誤:

  • search_and_count(&fileptr, &word, &length, &num);你已經宣佈他們爲指針,所以如果你想發送的指針
  • char* []聲明應該只是char [],因爲它可以作爲指針

然後進行治療去除所有&步階,在每聲明,看看你是否有任何邏輯錯誤和祝你好運!

+1

Upvoted,但建議稍作修改:「'char []'因爲它已經是一個指向char []的指針,因爲它會衰減到指針」或類似的地方。數組不是一個指針,但可以像一個對待。更多在這裏:http://stackoverflow.com/questions/1461432/what-is-array-decaying – user4581301

1

問題1:單詞似乎是存儲您搜索的單字詞的緩衝區。但是您將其定義爲100個指針的數組。嘗試:

char word[100]; // without *. Nom it can be used as a c-string. 

問題2:給你當你調用你的搜索功能是不正確的參數。嘗試:

search_and_count(fileptr, word, &length, &num); 

問題3:可變長度和num被定義爲指針爲int。但是你真的想傳遞一個int的地址。所以,改變自己的定義:

int length; 
    int num; 

一般資料:

如果你想一個指針傳遞給T類型的對函數的變量參數,有兩種可能性,一個變體:

  • 要麼你已經有一個有效的指針T *p;已指向某處。然後你可以直接傳遞這個指針p作爲參數。在你的代碼,它是fileptr的該值設置由fopen()
  • 指向一個有效FILE對象,或者您已經有了一個對象T o;,你想一個參數傳遞它的地址的功能(這樣的情況下,你可以通過&p這就是你的int變量的情況
  • 或者你已經有一個數組T a[100];並且你想傳遞一個指向數組的指針。 ,你會調用你的函數a,因爲數組的名稱將被理解爲指向數組的第一個元素的指針。
相關問題