#include <stdio.h>
#include <string.h>
#define SIZE 1000
int main(void)
{
char sent[] = "\0";
char alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ";
unsigned int count;
unsigned int k;
unsigned int j;
printf("Please enter a sentence to analyze\n");
fgets(sent, SIZE, stdin);
printf("\n Letter\t ||\tAmount\n");
printf(" ================================\n");
for(j = 0; alpha[j] != '\0'; j++)
{
count = 0;
for (k = 0; sent[k]!= '\0'; k++)
{
if ( alpha[j] == sent[k])
{
count++;
}
}
printf("\t%c\t ||\t %u\n", alpha[j], count);
printf(" --------------------------------\n");
}
return 0;
}
每次运行此程序时,我都会收到错误&#34; Segmentation Fault(Core Dumped)&#34;。但是该程序似乎运行正常。为什么会发生这种情况,我该怎么做才能解决这个问题?
答案 0 :(得分:1)
在您的代码中,
char sent[] = "\0";
分配的数组大小仅等于提供的初始化程序"\0"
(和null终止符)的大小。所以,稍后,通过
fgets(sent, SIZE, stdin);
你正在访问超出范围的内存。这会调用undefined behavior。
引用C11
标准,章节§6.7.9
如果初始化未知大小的数组,则其大小由索引最大的数组决定 具有显式初始化程序的元素。 [...]
您需要的是在定义时提供数组大小,如
char sent[SIZE] = "\0";