一种 ASCII 算法给出了分段错误,而另一种则没有
One kind of ASCII arithmetic gives segmentation fault while another doesn't
所以如果我这样做,我会得到分段错误:
#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;
您正在尝试更改无法写入的数据,因此会出现段错误。
所以如果我这样做,我会得到分段错误:
#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;
您正在尝试更改无法写入的数据,因此会出现段错误。