我定义了一个函数,当调用它并给定两个字符串时,应检查第二个字符串中是否存在第一个字符串的字母。这是我的代码:
int lettersOfAInB(char a[], char b[])
{
int count = 0;
for(int i = 0; a[i] !='\0'; i++)
{
count = 0;
for(int j = 0; b[j] !='\0'; j++)
{
if(a[i] == b[j])
{
count = 1;
break;
}
}
if(count == 0)
return 0;
}
return 1;
}
int main()
{
char a[5] = "zc";
char b[4] = "oabq";
int is;
is = lettersOfAInB(a, b);
if(is)
printf("Yes");
printf("\n");
return 0;
}
这将始终输出“是”,而不管我给定的字符串如何。有人可以解释一下为什么吗?谢谢。
答案 0 :(得分:1)
有人可以向我解释为什么吗?
未定义行为(UB)
for(int j = 0; b[j] !='\0'; j++)
尝试访问char b[4]
的4个元素之外的内容。结果UB。可能发生任何事情。
如果将其编码为将char b[]
视为 string (具有 null字符的数组),则允许编译器根据需要调整数组大小< / p>
// char b[4] = "oabq";
char b[] = "oabq"; // now `b[]` has 5 ellements