c - 为什么我在 C 中遇到分段错误?
问题描述
尝试执行CS50 Crack加密问题时出现分段错误。我是 C 语言的新手。代码编译正常,但是当我运行调试器时,它似乎得到以下错误:
Process received SIGSEGV: Segmentation fault
...at guess[0] = *alphabet1;
我查看了其他堆栈溢出问题,并怀疑它可能与string
guess 是字符串文字有关,但这对我来说已经混淆了。您能否向我解释一下为什么会出现分段错误或将我引导到一个好的网页来研究这个问题。相关代码如下。
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);
}
}
解决方案
CS50 头文件cs50.h
定义
typedef char *string;
所以当你定义和初始化
string guess = " ";
这和
char *guess = " ";
所以你将值分配guess
给指向一个字符串文字。
因此,正如您在问题中所猜测的那样,这就是问题所在
guess[0] = *alphabet1;
您不能写入字符串文字的数据,尽管您可以更改指针的值,例如,如果您想更改程序中的默认响应。
推荐阅读
- sql - 错误:列中的空值违反非空约束
- json - phpunit 断言 json_encode 数组
- javascript - Lodash:带有无关紧要的真值表
- spring - 是否可以更改弹簧启动执行器中的端点名称
- python - pandas html 函数转换为浮点数
- android-recyclerview - 在recyclerview上方滚动viewpager标题不起作用
- python - Googletrans API 属性错误
- pandas - 删除第一个或最后一个字符,以便列中的值应以数字开头
- lua - 使用旋转块脚本时,Roblox 部件未正确碰撞
- c# - Crystal Reports 在不同环境下登录失败