char到大写赋值分段错误

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)

Jam*_*lis 6

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)