[英]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.