首先,我不得不说,因为这个问题,我的大脑被烧伤了。我需要写一个函数来检查第三个参数是否是第一个和第二个参数的交错。我写了它,但当我运行它时,它会给我这个错误"警告:函数"interleaded"的隐式声明;这是我的代码:
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);
}
有人能帮我吗?
"隐含声明"通常意味着,在尝试使用(调用(函数时,编译器不知道函数签名/原型,因此无法确定返回类型,也无法对传递的参数进行任何检查。
大多数情况下,这可以通过解决
- 在使用之前定义函数
- 正向声明函数
也就是说,您的函数调用和printf()
的使用是不正确的。你可以做一些类似的事情
bool result = interleaved(str1[100], str2[100], str3[100]);
printf("%s", result?"yes":"no");
其打印";是";则函数返回true;否";否则
在使用函数之前,必须声明或定义要使用的函数。
此外,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("%sn", interleaved(str1, str2, str3) ? "true" : "false"); /* correctly use printf() */
}
您正试图使用interleaved
(它是bool
(的结果作为printf
的格式字符串,这是不允许的。
相反,你需要做这样的事情:
printf("%d", interleaved(str1, str2, str3));
此外,在调用该函数之前,您至少需要声明interleaved
。