【发布时间】:2020-11-27 15:35:17
【问题描述】:
给定一个字符串,num,由字母和数字组成,求给定字符串中每个数字(0-9)出现的频率。
'''
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include<ctype.h>
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
char num[20];
int i;
int count[15]={0};
scanf("%s",num);
for(i=0;i<10;i++){
printf("\n");
for(int j=0;j<strlen(num);j++){
if(isdigit(num[j])){
if(i == num[j]-'0'){
count[i]+=1;
}
}
}
printf("\nCount %d:%d",i,count[i]);
}
for(i=0;i<10;i++){
printf("%d ",count[i]);
}
return 0;
}
'''
输出:
计数 0:5
计数 1:9
计数 2:5
计数 3:12
计数 4:8
计数 5:11
计数 6:15
计数 7:4
计数 8:4
退出,分段错误
为什么检查数字是否为9时不起作用?
【问题讨论】:
-
char num[20];为 19 个字符加上一个空终止符分配空间,但打印的计数显示 73 位。无论您输入什么输入都会超出缓冲区。 -
此外,因为您在一行之前打印
\n字符,而不是在设计的末尾,所以计数为 9 的行保留在缓冲区中,而不是立即打印。该程序实际上完成了这些初始循环并继续执行进一步的代码,由于缓冲区溢出而崩溃。 -
@EricPostpischil 啊,我完全忘记了字符串的大小。非常感谢!
标签: c string segmentation-fault