【发布时间】:2017-11-10 18:40:10
【问题描述】:
#include<stdio.h>
int fcount(char ch, char *a){
if(*a == '\n'){
printf("d");
return 0;
}
else
if(*a == ch){
printf("b");
return 1 + fcount(ch, a++);
}
else
if(*a!=ch){
return fcount(ch, a++);
}
}
int main(){
char *s;
int c = 0, i;
printf("Enter anything you wish\n");
scanf(" %[^\n]s",s);
for(i = 97; i <= 122; i++){
c = fcount(i, s);
if(c != 0)
printf("[%c] %d\n", i, c);
}
}
这是我计算给定文本行中每个字符出现频率的逻辑 但是程序似乎没有显示预期的输出
我得到的是:分段错误(核心转储) 请给我一些建议!
【问题讨论】:
-
char *s;没有内存分配:它是一个未初始化的指针。建议以char s[1024];为例,并限制scanf中的输入长度。 -
char s[100];和scanf("%99[^\n]", s);,注意格式说明符中不需要s。 -
旁白:避免硬编码数字魔术:
for(i = 'a'; i <= 'z'; i++)(假设连续编码,但通常是这种情况)。 -
您不得在您的格式中的
%[^\n]后面有s。
标签: c