如何解决功能的隐式定义
首先,我要说的是,由于这个问题,我的大脑被烧了。我需要编写一个函数来检查第3个参数是否是第1个和第2个参数的交错。我写了它,但是当我运行它时,它给了我这个错误。 “警告:函数“ interleaved”的隐式声明”这是我的代码:
void main()
{
char str1[100] = "ABC";
char str2[100] = "XYZ";
char str3[100] = "XAYZBC";
printf(interleaved(str1,str2,str3));
}
bool interleaved(char str1[],char str2[],char str3[])
{
int i = 0,j = 0,k = 0;
if (strlen(str1) + strlen(str2) != strlen(str3))
return false;
while (k < strlen(str3))
{
if (i < strlen(str1) && str1[i] == str3[k])
i++;
else if (j < strlen(str2) && str2[j] == str3[k])
j++;
else
return false;
k++;
}
if (!(i == strlen(str1) && j == strlen(str2) && k == strlen(str3)))
return false;
return true;
}
我找到了有问题的部分,并尝试按以下步骤修复它:
void main()
{
char str1[100] = "ABC";
char str2[100] = "XYZ";
char str3[100] = "XAYZBC";
bool result = interleaved(str1[100],str2[100],str3[100]);
printf(result);
}
有人可以帮我吗?
解决方法
“隐式声明”通常意味着,当您尝试使用(调用)函数时,编译器不知道函数签名/原型,因此无法确定返回类型,也无法对参数进行任何检查过去。
大多数情况下,两者之一可以解决
- 在使用该功能之前对其进行定义
- Forward declaring函数。
也就是说,您的函数调用和printf()
的用法不正确。您可以做类似的事情
bool result = interleaved(str1[100],str2[100],str3[100]);
printf("%s",result?"yes":"no");
该函数返回true时打印“ yes”,否则返回“ no”。
,使用它们之前,您必须声明或定义要使用的函数。
此外,bool
也不是作为printf()
的第一个参数传递的正确数据。
尝试一下:
bool interleaved(char str1[],char str2[],char str3[]); /* declare the function */
int main(void) /* use standard type for main() */
{
char str1[100] = "ABC";
char str2[100] = "XYZ";
char str3[100] = "XAYZBC";
printf("%s\n",interleaved(str1,str2,str3) ? "true" : "false"); /* correctly use printf() */
}
,
您正尝试将interleaved
(即bool
)的结果用作printf
的格式字符串,这是不允许的。
相反,您需要执行以下操作:
printf("%d",str3));
此外,在调用该函数之前,您至少需要声明interleaved
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。