错误:无法将“char (*)[6]”转换为“char**”

Posted

技术标签:

【中文标题】错误:无法将“char (*)[6]”转换为“char**”【英文标题】:error: cannot convert ‘char (*)[6]’ to ‘char**’ 【发布时间】:2022-01-22 09:45:04 【问题描述】:

所以我的问题如下,我试图传递一个字符串数组并试图找到一个特定的字符串,但由于某种原因,编译器给了我这个错误,我没有得到它,因为我清楚地将一个字符串数组传递到函数。

程序:

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

int find_uid(char* users[],char* uid)

    for (int i=0;i<32;i++)
    
        if (strcmp(users[i],uid) == 0)
            return 1;
    
    return 0;


char users[32][6];

int main()

    char* user;
    user = new char[6];
    strcpy(user,"10014");
    strcpy(users[6],user);
    printf("Result %d",find_uid(users,"10014"))

【问题讨论】:

注意 - 我已经删除了 [c] 标签,因为 new 的存在表明您正在尝试用 C++ 编写(尽管使用类似 C 的编码风格);这是两种不同的语言 既然可以用脚走路,为什么还要用手走路?使用std::vector&lt;std::string&gt; 10014 不适合 char[5],您需要为尾随 '\0' 留出空间 “因为我清楚地传递了一个字符串数组......”不,你没有。 Using std::vector and std::string. 【参考方案1】:

对于在此代码 sn-p 中使用 strcpy 的初学者

user = new char[5];
strcpy(user,"10014");

调用未定义的行为,因为动态分配的数组没有空间来存储字符串文字 "10014" 的终止零字符。你需要分配一个数组至少有6 个元素

user = new char[6];

用户声明为like的二维数组

char users[32][5];

用作函数参数被隐式转换为指向char ( * )[5]类型的第一个元素的指针。

另一方面,对应的函数参数的类型为char **。 这些指针类型不兼容。所以编译器会报错。

你至少需要像这样声明函数

int find_uid( char ( *users )[5],char* uid);

或者 i 更好地声明函数

bool find_uid( const char users[][5], size_t n, const char *uid );

数组的第二维再次增加

char users[32][6];

如果你想在数组中使用字符串文字"10014"

【讨论】:

以上是关于错误:无法将“char (*)[6]”转换为“char**”的主要内容,如果未能解决你的问题,请参考以下文章

C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”

std :: make_pair:无法将'ch'(类型'char')转换为'char &&'[duplicate]

不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助

将 1ch 16000Hz PCM 转换为 2ch 44100Hz PCM

无法将当前进程 ID 转换为子进程 ID

启动 vim 时出现错误消息:“无法将区域设置类别 LC_NUMERIC 设置为 en_CH”(或 en_BR、en_RU 和 LC_TIME、LC_COLLATE、LC_MONETARY、LC_ME