一种 ASCII 算术会导致分段错误,而另一种则不会

时间:2021-03-13 14:52:08

标签: c math ascii cs50

所以如果我这样做,我会得到分段错误:

#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);

它按预期工作。什么给?

1 个答案:

答案 0 :(得分:2)

string 不是标准的 C 符号,很可能在您的 cs50.h 头文件中定义为:

typedef char* string;

这意味着变量 word 是对常量 数据的引用,该数据无法更改。因此,当您尝试执行以下操作时:

word[i] += 32;

您正在尝试更改无法写入的数据,因此,段错误。

相关问题