当我尝试运行此代码时,cmd关闭

时间:2016-05-15 12:38:10

标签: c string

程序应该收到一个字符串,然后检查每个字母的提及频率。

到目前为止我做了这么多(我只会在这个阶段检查A字母)

int main(int argc, char const *argv[])
{
    int i=0;
    int l,k;
    int r=10;
    char list[10][10] ;
    /* recieve a strng*/
    char str[10] ;
    fgets(str, 10, stdin);
    str[10] = 0;

    /*initialise list[] to -'s */
    for (l = 0; l < 10; l++) {
        for(k=0; k<10; k++) {
            list[l][k]='-' ;
        }
        printf("\n");
    }

    /*checks if the letter== "A" if yes replace with * */
    for ( i = 0; i < 10 ; ++i) {
        if (str[i]== 97 ) {
            list[r][0]='*';
            r--;
        }
    }

    /*print the second list[] */
    for (l = 0; l < 10; l++) {
        for(k=0; k<10; k++) {
            printf("%c  ", list[l][k]);
        }
        printf("\n");
    }
    return 0;
}

我在添加阅读字符串代码之前对其进行了测试并且它有效,但它不是我想要的:/

char list[10];
fgets(str, 10, stdin);
str[10] = 0;

我应该集中精力让它再次发挥作用的任何想法? 我究竟做错了什么?

1 个答案:

答案 0 :(得分:3)

问题,我认为是在

<a class="parent"> 
    <span id='mySpan'>
       <img src="http://www.mail-signatures.com/articles/wp-content/uploads/2014/08/facebook.png" alt=""><br>
    </span>    
</a>

此处, list[r][0]='*'; 的值为r,这是一种越界访问。它调用undefined behavior

请记住,10数组使用基于C的索引。所以,对于像

这样的数组
0

有效索引为0到9。

除此之外,使用字母的直接ASCII值,如 int arr[10] = {0}; 不是非常便携的方法。您应该更好地使用if (str[i] == 97 )

那就是说,我不确定你的代码的逻辑,它不会从任何角度做你打算它做的事情。