gpt4 book ai didi

c - 没有段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:23 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int char_freq[26] = {0};
int i = 'a';
int plain_char = getchar();
while(plain_char != EOF)
{
char_freq[plain_char-'a']++;
plain_char = getchar();
}
while(i <='z')
{
printf("%c %d \n",i,char_freq[i-'a'] );
i++;
}
return EXIT_SUCCESS;
}

在上面的程序中,我试图制作一个频率表并尝试使用 ASCII 值。问题是我没有检查 plain_char ASCII 值是否在小写字母范围内,如果我在 plain_char 中输入 say A 然后 65-97 = -32 数组索引并递增它,我不应该得到一个段错误吗?但是程序仍然运行良好?

最佳答案

只有在您的程序允许的内存区域之外时,您才会遇到段错误,在定义的数组之外并不意味着您在程序的内存区域之外。但是,它可以读取垃圾数据和/或覆盖程序数据的其他部分,或者在某些情况下甚至可能导致缓冲区溢出攻击机会的程序代码。

当然,如果您的数组位于内存区域的最开头或结尾,那么您遇到段错误。数组放入内存的位置由编译器和链接器决定。当您超出阵列范围时类似。尝试例如 char_freq[2^31] 这可能会给您带来段错误。

关于c - 没有段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com