c - 一种 ASCII 算法会产生分段错误,而另一种则不会
问题描述
所以如果我这样做,我会得到分段错误:
#include <stdio.h>
#include <cs50.h>
int main(void)
{
string word = "WORD";
for(int i = 0; word[i] != 0; i++) {
word[i] += 32;
printf("%c", word[i]);
}
}
而如果你这样做:
printf("%c", word[i] + 32);
它按预期工作。是什么赋予了?
解决方案
string
不是标准的 C 符号,并且可能在您的cs50.h
头文件中定义为:
typedef char* string;
这意味着变量word
是对常量数据的引用,即不能更改的数据。因此,当您尝试执行此操作时:
word[i] += 32;
您正在尝试更改无法写入的数据,因此是 seg-fault。
推荐阅读
- c# - ASP.NET Core 3.0 Razor Pages Select Helper Not Posting Value
- azure-devops - 从 Azure Pipelines 更新 JIRA 问题
- python - 为什么我的 python 应用程序的 cron 作业总是返回 301 响应代码?
- elixir - 如何使用 Elixir 从 Mailgun 中邮寄的存储中获取附件
- sql - 我想问一个关于 ORACLE SQL 的问题
- opencv - 压力到图像和图像到压力的转换
- spring - 批量插入spring jdbc模板识别失败记录
- javascript - 向表中添加行会更改选择索引?
- c++ - 如何为具有特定名称(QWidget 名称)的 QWidget 的(非直接)子代 QLabel 指定样式?
- c# - 使用 OAuth 2 通过 SMTP 发送邮件