错误:无法将“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<std::string>
。
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
启动 vim 时出现错误消息:“无法将区域设置类别 LC_NUMERIC 设置为 en_CH”(或 en_BR、en_RU 和 LC_TIME、LC_COLLATE、LC_MONETARY、LC_ME