Aki*_*nos 4 c++ char segmentation-fault uppercase
为了更多地了解c ++的内部工作原理,我决定编写自己的字符串类.但是我坚持.toUpper()和.toLower()功能.这是我的代码.
Text& toUpper(){
char* c = this->str;
while(*c != 0, c++){
if((*c >= 'a') && (*c <= 'z')){
*c = *c - 32;
std::cout << *c << std::endl;
}
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
我已经隔离了导致分段错误的行*c = *c - 32但是我不明白为什么这会导致问题.我试过(char)(*c - 32)但是没用.此外,它不是一个限制问题,因为没有输出.有任何想法吗?
更新:我的构造函数
Text(char* str){
this->str = str;
this->updateLength(); // glorified strlen
}
Run Code Online (Sandbox Code Playgroud)
我的指针定义
private:
char* str;
int len;
Run Code Online (Sandbox Code Playgroud)
while(*c != 0, c++)
Run Code Online (Sandbox Code Playgroud)
whileC++中的循环采用单个表达式.它在每次迭代时评估该表达式以确定是否继续.
这里,是逗号运算符,而不是分隔符.逗号运算符计算第一个part(*c != 0),丢弃结果,然后计算第二个part(c++)并将其作为结果.
由于你一直在递增c,所以条件永远不会false因为c永远不会变成NULL(注意,如果写的不是测试指向的值,它正在测试指针本身).
你的循环作为循环会更干净for:
for (; *c != 0; ++c)
Run Code Online (Sandbox Code Playgroud)