为了进一步了解 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/