繁体   English   中英

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

[英]The cmd closes when I try to run this code

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

到目前为止,我已经做了很多(在此阶段,我只会检查字母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;

我有什么想法可以使它再次起作用吗? 我究竟做错了什么?

我认为问题出在

 list[r][0]='*';

在这里, r值为10 ,这是越界访问。 它调用未定义的行为

请记住, C数组使用基于0的索引。 因此,对于像

 int arr[10] = {0};

有效索引为0到9。

除此之外,使用字母的直接ASCII值,例如if (str[i] == 97 )不是很可移植的方法。 您应该使用if ( str[i] == 'A')更好。

就是说,我对代码的逻辑不是很确定,无论从哪个角度来看,它都没有实现您的意图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM