无法确定为什么函数调用中从 char* 到 char 的无效转换
not able to identify why invalid conversion from char* to char coming in function call
错误来了-错误:从"char*"到"char"的转换无效 [-允许]
cout<< par(s,n1,num1,word);
为什么在主要原因invalid conversion from char* to char?
中调用par()
函数
自己尝试了很多寻找原因。我是 c++ 的初学者。我在 par(( 函数中没有发现任何错误。我没有在函数中的任何地方做赋值不匹配,认为由于函数 par(( 中提供的参数可能存在错误
#include<iostream>
#include<string.h>
using namespace std;
int par(char s[][80],int,int,char);
char* substr(char*,int,int);
int main()
{
char s[][80]={{"this is rockstar"},{"I am rockstar"},{"the best one"},{"no one can dare"},{"rockstar rocks always"}};
char word[80]={"rockstar"};
int n1=5;
int num1=0;
cout<<par(s,n1,num1,word);
return 0;
}
int par(char s[][80],int n1,int num1,char word[80])
{
int k=0;
int length_word=strlen(word);
int t=0;
char beg[80];
while(t!=strlen(word))
{
beg[t]=word[t];
t++;
}
beg[t]=" ";
char end[80];
char mid[80];
mid[0]=' ';
t=0;
int l=1;
while(t!=strlen(word))
{
mid[l]=word[t];
l++;
t++;
}
mid[l]=' ';
t=0;
l=1;
end[0]=' ';
while(t!=strlen(word))
{
end[l]=word[t];
t++;
l++;
}
char temp[80];
while(k<n1-1)
{
int i=0;
while(s[k][i]!=' ')
{
temp[i]=s[k][i];
i++;
}
if(strcmp(substr(temp,1,strlen(word)+1),beg)==0)
{
num1+=1;
}
int tr;
for(tr=2;tr<strlen(temp)-(strlen(word)+2);tr++)
{
if(strcmp(substr(temp,j,strlen(word)+2),mid)==0)
{
num1+=1;
}
}
if(strcmp(substr(temp,strlen(temp)-strlen(word),strlen(word)+1),end)==0)
{
num1+=1;
}
k++;
}
return num1;
}
char* substr(char *s,int i, int j)
{
int pos=i-1;
static char res[80];
int k=0;
while(pos<=i+j-2)
{
res[k]=s[pos];
pos++;
k++;
}
return res;
}
问题似乎出在par()
的声明上:
int par(char s[][80],int,int,char);
这里的第四个参数是char
。但是,在线main()
功能内部
cout<<par(s,n1,num1,word);
你传递 word,它被声明为char[80]
,数组很容易衰减到 C++ 和 C 中的指针 https://stackoverflow.com/a/1328246/6710751。所以基本上,你传递一个char[]
(或char*
,一个指向char
的指针(,而编译器只期望char
。
当然,main()
方法之后的par()
的后续实现具有第 4 个参数的正确类型,但编译器在查看main()
中的代码时还不知道这一点。要解决此问题,您必须调整par()
声明以匹配实现:
int par(char s[][80],int n1,int num1,char word[80]);
奖励:由于这是C++而不是 C,因此对于任何字符串,您应该更喜欢std::string
而不是 C 样式char[]
。std::string
更容易处理,始终知道它的大小(与字符数组不同(,并且可以避免缓冲区溢出、内存泄漏等在 C 样式字符串处理中非常常见的情况。
方法 par(( 声明中的第 4 个参数的类型为char
。您传入的参数是char word[80]
.
在函数par的原型中:
int par(char s[][80],int,int,char);
第 4 个参数的类型为char,而在par的函数定义中:
int par(char s[][80],int n1,int num1,char word[80])
{...}
第 4 个参数是char 类型的 aray。所以这就是错误。要修复此错误,您需要将函数原型中的第 4 个参数从char
更改为char []
。
此外,在函数par的主体中,您在第一个 whilebeg[t]=" "
之后有这行代码,这是错误的,因为您正在尝试分配字符串文字,而它应该是字符文字。
在函数par的主体中,您有这行代码if(strcmp(substr(temp,j,strlen(word)+2),mid)==0)
这里的变量j未定义,这是另一个错误。
希望有帮助。
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 在这个简单函数中从'char'到'const char*'的无效转换
- 'const char [26]' 和 'LPSTR ' 类型的无效操作数
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- 将文本文件读取为 const char* 有时有效,有时无效
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- C++错误:从"char"到"const char*"的转换无效[-允许]
- 从'const char**'到'char* const*'的转换无效
- 从 'char' 到 'char*' strcat 函数的转换无效
- 使用表达式初始化char*无效
- 简单的 int 到字符串转换..int to const char* 无效