c++ - char 到大写赋值段错误

标签 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;
    }

我已将导致段错误的行隔离到 *c = *c - 32 但我不明白为什么这会导致问题。我尝试了 (char)(*c - 32) 但这没有用。这也不是一个边界问题,因为没有任何输出。有什么想法吗?

更新:我的构造函数

Text(char* str){
        this->str = str;
        this->updateLength(); // glorified strlen
    }

我的指针定义

private:
    char* str;
    int len;

最佳答案

while(*c != 0, c++)

C++ 中的while 循环采用单个表达式。它会在每次迭代时评估该表达式以确定是否继续。

此处,, 是逗号运算符,而不是分隔符。逗号运算符计算第一部分 (*c != 0),丢弃结果,然后计算第二部分 (c++) 并将其作为结果产生。

因为你一直递增 c,条件永远不会是 false 因为 c 永远不会变成 NULL(注意如所写,它不是在测试指向的值,而是在测试指针本身。

你的循环会比 for 循环更简洁:

for (; *c != 0; ++c)

关于c++ - char 到大写赋值段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691099/

相关文章:

C - 修改了 2 个二维字符数组

c - 多字符比较,怎么写才更聪明?

c - C 程序输入后不断出现段错误

c++ - Qt创建者: Segmentation Fault through SIGSEGV (C++)

c - 相同的程序给我不同的输出

c++ - 混合使用 constexpr 和 const?

c++ - lambda 函数返回类型不起作用

c++ - 将外部对象作为类成员的引用的优点/缺点?

c++ - 移动MFC项目对话框的方法

c++ - 如何在 C++ 中连接字符串和字符?