一种ASCII算法给出了分段错误,而另一种算法没有';T
因此,如果我这样做,我会得到分段错误:一种ASCII算法给出了分段错误,而另一种算法没有';T,c,math,ascii,cs50,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]); } } 它按预期工作。给出了什么
#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]);
}
}
它按预期工作。给出了什么?
字符串
不是标准的C符号,可能在cs50.h
头文件中定义为:
typedef char* string;
这意味着变量word
是对常量数据的引用,这些数据不能更改。因此,当您尝试执行以下操作时:
word[i] += 32;
您试图更改无法写入的数据,因此出现seg故障。字符串从何而来
string
在C中不是有效的关键字。假设string
是char*
的typedef
word
指向内存的只读位置(包含“word”
)。试图更改该空间的内容会调用未定义的行为(在您的特定情况下是分段错误)。但我不认为这是问题所在。在过去的十年里,头文件的可憎性让初学C的学生走上了错误的道路,这比学术界最底层的教师做的还要多。它是可怕的,完全没有必要的,而且不应该被用于一门课程,更不用说它已经存在多年了代码>?不需要。请使用tolower()
。明确地说,char*
不是问题所在“WORD”
是。另一方面,据我所知,char*不会引用常量数据?我喜欢将文字字符串标记为只读而不是常量,以避免出现const
关键字的问题。字符串文字不是常量对象,它们是只读对象:-)@ILoveYeezis:“WORD”
是变量所指向的常量数据。如果你有马洛克的记忆,结果会不同。@RobertHarvey严格地说,字符串不是问题所在。好的,谢谢。
word[i] += 32;