无法将参数 'char (*)[30]' 转换为 'char*' 到 '1'

标签 c visual-c++

#include <stdio.h>
char name[100][30];
char author[100][30];
char publisher[100][30];
int in_out[100];
int i=0;
int dumpnumber;

void add_book();
int search_book();
void printing(int id_print);
int search(char *text1, char *text2);

int search_book(){
    int select_search;  
    char dumpchar[30];

    printf("1. Title to search : ");
    printf("2. Author to search : ");
    printf("3. Name to search : ");
    printf("Now What do you want ? : ");
    scanf("%d", &select_search);
    if(select_search==1){

        printf("Enter Title to search : ");
        scanf("%s", dumpchar);
        //Search Engine Making
        //char dumpchar
        **printing(search(name,dumpchar));**

    }else if(select_search==2){

        printf("Enter Author to search : ");
        scanf("%s", &dumpchar);
        printing(search(author,dumpchar));
    }else if(select_search==3){

        printf("Enter Publisher to search : ");
        scanf("%s", &dumpchar);
        printing(search(publisher,dumpchar));
    }else{
        break;
    }

    return 1;

    printf("Succeed Saved in Directory %d \n",i);
}


int search(char (*text1)[30], char *text2)
{
    int search_i=0;
    int search_j=0;
    while(*text1){
        if(*text2==*text1){
            while(*text2=*text1){
            text2++;
            text1++;
            search_j++;
            if(*text2==NULL){
                return search_i;
            }   
            }
        text2=text2-search_j;
        text1=text1-search_j;   
        }
        text1++;
        search_i++;
    }
    return -1;
}

每当我尝试在搜索函数中传递两个参数时,

出现这个错误,请帮我调整这个错误。

program 指示此部分导致错误:printing(search(name,dumpchar));

说[错误]无法将参数“1”的“char ()[30]”转换为“char”到“int search(char*, char*)”

请有人帮忙!!!

最佳答案

原型(prototype)声明

int search(char *text1, char *text2);

错误,与函数定义不匹配。

使用正确的一个:

int search(char (*text1)[30], char *text2);

另请注意,scanf("%s", &dumpchar); 通过将指向类型错误的对象的指针传递给 scanf() 来调用未定义的行为.使用 scanf("%s", dumpchar); 就像您在上一行中所做的那样。 scanf("%29s", dumpchar); 更好,因为指定了最大长度以避免缓冲区溢出。

关于无法将参数 'char (*)[30]' 转换为 'char*' 到 '1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975325/

相关文章:

在嵌入式编程中 main 启动之前检查 GPIO 的状态

C - Makefile 可能缺少一行

c - Win32 位图无法加载

c++ - 为什么我们确实需要构造函数?

c++ - 创建并链接到从旧 DLL 文件生成的 .lib 文件

windows - 使用 MS Visual studio 2010 构建的交叉编译应用程序

c - 关于C中链表的下一个字段中最低有效位的声明

c - golang中等效的结构数组

c++ - Cmake 找不到 Boost 文件夹

c++ - Visual Studio 编译的 Qt 插件在 Release模式下无法加载