从不兼容的指针类型[默认启用]传递'search_and_count'的参数2

时间:2016-03-11 23:08:49

标签: c string pointers char

我得到了一堆指针错误,指针并不是我最强的观点。我的大多数错误都与传递参数有关。

错误是:

  

HW5_mkhan44.c:在函数'main'中:HW5_mkhan44.c:31:3:警告:   从不兼容的指针传递'search_and_count'的参数1   输入[默认启用]

     

HW5_mkhan44.c:11:6:注意:预期'struct FILE *'但参数是   输入'struct FILE **'

     

HW5_mkhan44.c:31:3:警告:传递'search_and_count'的参数2   来自不兼容的指针类型[默认启用]

     

HW5_mkhan44.c:11:6:注意:预期'const char *'但参数是   输入'char *(*)[100]'

     

HW5_mkhan44.c:31:3:警告:传递'search_and_count'的参数3   来自不兼容的指针类型[默认启用]

     

HW5_mkhan44.c:11:6:注意:预期'int *'但是参数是类型的   'int **'

     

HW5_mkhan44.c:31:3:警告:传递'search_and_count'的参数4   来自不兼容的指针类型[默认启用]

     

HW5_mkhan44.c:11:6:注意:预期'int *'但是参数是类型的   'int **'

这是代码:

#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);
        }
}

2 个答案:

答案 0 :(得分:4)

这看起来像语法错误:

  • search_and_count(&fileptr, &word, &length, &num);中,您已将它们声明为指针,因此如果要发送指针,请删除所有&
  • char* []声明应该只是char [],因为它可以被视为指针

然后逐步查看每个语句,看看你是否有任何逻辑错误和好运!

答案 1 :(得分:1)

问题1:字似乎是存储您搜索的signe字词的缓冲区。但是你将它定义为一个包含100个指针的数组。试试:

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

问题2:调用搜索功能时提供的参数不正确。试试:

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

问题3:将变量length和num定义为指向int的指针。但是你真的想传递一个int的地址。所以改变他们的定义:

  int length;
  int num;

一般信息:

如果要将指向T类型变量的指针作为函数的参数传递,有两种可能性和变量:

  • 要么你已经有一个指向某个地方的有效指针T *p;。然后你可以直接传递这个指针p作为参数。在您的代码中,fileptr的情况是FILE
  • 将值设置为指向有效的fopen()对象
  • 或者您已经有了一个对象T o;,并且您希望将该参数的地址传递给该函数(以便该函数可以更改此对象的内容。然后您将传递{{1}这就是你的int变量的情况。
  • 或者您已经有一个数组&p并且您想要传递指向该数组的指针。然后,您将调用函数传递T a[100];,因为数组的名称将被理解为指向数组第一个元素的指针。