int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
char *a=malloc(256);
int first[26]={0},c=0,i=0,flag=0;
//printf("Enter string");
fgets (a, MAX_NAME_SZ, stdin);
while(a[c]!='\0')
{
first[a[c]-'a']++;
c++;
}
for(i=0;i<26;i++)
{
if(first[i]==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("panagram");
}
else
{
printf("not panagram");
}
return 0;
}
答案 0 :(得分:0)
您的代码中存在逻辑错误,因为您没有对用户输入进行任何输入验证和/或完整性检查。
在您的代码中,
first[a[c]-'a']++;
如果first
不在a[c]
范围内,会尝试访问[a, z]
数组中的无效内存位置。
即使用户输入UPPER
个案字母或空格 [] (所有这些都在逻辑上应视为有效输入),通过访问越界内存来编写经验undefined behaviour。
为避免这种情况,请在将a[c]
值直接用作first
数组的索引之前检查{{1}}值。