2015-02-12 79 views
-4

这是一个panagram程序几乎正确,但我不明白为什么它不工作?为什么这个pangram程序不工作?

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; 
} 
+4

*它不工作?*是什么意思?你有任何错误? – Rizier123 2015-02-12 06:08:19

+0

请指出您遇到什么问题,或将您的错误消息与您的问题一起发布 – 2015-02-12 06:11:39

+0

欢迎使用Stack Overflow!请参考[游览](http://stackoverflow.com/tour)并阅读[如何提问](http://stackoverflow.com/help/how-to-ask)以了解我们对问题的期望。 – 2015-02-12 06:12:24

回答

0

。在你的代码的逻辑错误,因为你没有做任何输入验证和/或理智上的用户输入检查。

在代码中,

first[a[c]-'a']++; 

试图访问无效的内存位置中first阵列如果a[c]是不是在[a, z]的范围内。

即使对于的UPPER字母下一个用户输入或空间 [] (所有,逻辑上应该被认为是有效的输入),可以通过accesing外的结合存储器编程实际经验undefined behaviour

为了避免这种情况,请在直接使用该值作为first数组的索引之前检查a[c]的值。