gpt4 book ai didi

c - 预期为 ‘const char *’ 但 C 中的参数类型为 ‘char **’

转载 作者:太空狗 更新时间:2023-10-29 15:52:26 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来搜索数组以查找指定的键。参数 n 指定数组的有效大小,必须根据 strcmp 强加的字典顺序进行排序。如果找到键,该函数返回数组中该键出现的索引。因此,它可以返回子字符串的索引。但是,它出现了两个我无法修复的错误。请帮忙。

jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$ gcc FindStringInSortedArray.c -o FindStringInSortedArray
FindStringInSortedArray.c: In function ‘FindStringInSortedArray’:
FindStringInSortedArray.c:7:3: warning: passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
/usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘char **’
jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$

这是我的代码:

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

int FindStringInSortedArray(char *key,char *array[],int n)
{
int mid,cmp;
int low=strlen(array)-n;
int high=n;
if(low > high) return(-1);
mid = (low+high)/2;
cmp = strcmp(key,array[mid]);
if(cmp==0) return(mid);
if(cmp<0){
return(FindStringInSortedArray(key,array,n/2));
}else{
return(FindStringInSortedArray(key,array+n/2,n));
}
}

int main()
{
char key[2]="ab";
char *array[10]={"ab","bc","cd","de","ef","fg","gh","hi","ij","jk"};
int test=FindStringInSortedArray(key,array,10);
printf("Result:%d\n",test);
return 0;
}

最佳答案

int low=strlen(array)-n; 是错误的。将数组大小作为不同的参数传递,例如:

int FindStringInSortedArray(char *key,char *array[],int n, int arraysize)

因为数组在函数中退化为指针。 strlen 的声明形式为

strlen (const char*)

并且您传递的 *array[] 类型衰减为 char * *

在 C99 中,数组名不会退化为指向第一个元素的指针的三种基本情况:

  1. 当它是 &(地址)运算符的参数时。

  2. 当它是sizeof 运算符的参数时。

  3. 当它是char [N + 1]类型的字符串文字或wchar_t [N + 1]类型的宽字符串文字时( N 是用于初始化数组的字符串的长度,如 char str[] = "foo";wchar_t wstr[] = L"foo ";.

在 C11 中,新引入的 alignof 运算符也不会让其数组参数衰减为指针。

关于c - 预期为 ‘const char *’ 但 C 中的参数类型为 ‘char **’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com