首页 > 解决方案 > 为什么我在 C 中遇到分段错误?

问题描述

尝试执行CS50 Crack加密问题时出现分段错误。我是 C 语言的新手。代码编译正常,但是当我运行调试器时,它似乎得到以下错误:

Process received SIGSEGV: Segmentation fault
...at guess[0] = *alphabet1;

我查看了其他堆栈溢出问题,并怀疑它可能与stringguess 是字符串文字有关,但这对我来说已经混淆了。您能否向我解释一下为什么会出现分段错误或将我引导到一个好的网页来研究这个问题。相关代码如下。

string guess = "     ";
string hashed_word = "     ";
string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
string letters1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *alphabet;
char *alphabet1;


//check a-Z
for (int j = 0; j < 52; j++)
{
    alphabet1 = &letters1[j];
    guess[0] = *alphabet1;
    hashed_word = guess;
    if (strcmp(hashed_word, s) == 0)
    {
        print(guess);
    }
}

标签: cruntime-errorcs50

解决方案


CS50 头文件cs50.h定义

typedef char *string;

所以当你定义和初始化

string guess = "     ";

这和

char *guess = "     ";

所以你将值分配guess给指向一个字符串文字。

因此,正如您在问题中所猜测的那样,这就是问题所在

guess[0] = *alphabet1;

您不能写入字符串文字的数据,尽管您可以更改指针的值,例如,如果您想更改程序中的默认响应。


推荐阅读