如何对字符串作为指针执行大写转换
How do I perform an upper-case conversion on strings as pointers
我正在修改一些用C++编写的现有代码,这些代码使用字符串指针,但很难理解为什么我在使用 toupper(( 函数时遇到如此多的困难,或者将 ASCII 值减少 32 来执行大小写转换。 我已经成功地实现了我想要的,用最少的C++知识,但我想改进当前的代码,为了简单地证明一个技术点,它包含字母表中每个字母的 if 条件。
除了我难以掌握C++语法和规则之外,我的尝试可以按照我的意愿正常工作。
现有代码对"buf"的定义如下:
static void c_write(Ldisc ldisc, const char *buf, int len)
{
from_backend(ldisc->frontend, 0, buf, len);
}
然后,我为字母表中的26个字母中的每一个添加了以下内容,以证明我的观点。
if (buf[0] == 97) buf="A";
if (buf[0] == 98) buf="B";
if (buf[0] == 99) buf="C";
if (buf[0] == 100) buf="D";
。等等等等。
如果我将我的 26 个条件替换为以下内容,则编译失败。
if (buf[0]>=97 && buf[0]<=122)
{
buf[0]=buf[0]-32;
}
消息是"(376(:错误 C2166:l 值指定常量对象">
我也尝试使用 toupper(( 函数,但在那里得到了不令人满意的结果,要么使例程崩溃,要么返回一个虚假值。
为了帮助理解使用 buf[] 的上下文,现有代码包含以下工作部分。
switch (buf[0]) {
case CTRL('M'):
if (ldisc->protocol == PROT_TELNET && ldisc->telnet_newline)
ldisc->back->special(ldisc->backhandle, TS_EOL);
else
ldisc->back->send(ldisc->backhandle, "r", 1);
break;
case CTRL('?'):
case CTRL('H'):
if (ldisc->telnet_keyboard) {
ldisc->back->special(ldisc->backhandle, TS_EC);
break;
}
case CTRL('C'):
if (ldisc->telnet_keyboard) {
ldisc->back->special(ldisc->backhandle, TS_IP);
break;
}
case CTRL('Z'):
if (ldisc->telnet_keyboard) {
ldisc->back->special(ldisc->backhandle, TS_SUSP);
break;
}
default:
ldisc->back->send(ldisc->backhandle, buf, len);
break;
问题很简单,在这个
static void c_write(Ldisc ldisc, const char *buf, int len)
const
承诺不修改buf
指向的字符串。因此,显然不允许尝试将其转换为大写。这就是您的错误"(376(:错误 C2166:l 值指定 const 对象">试图告诉您的。
(明显(目的是编写字符串的函数不会修改该字符串似乎是合理的。因此,如果您需要转换为大写,我会说正确的位置是在您调用c_write
之前,而不是作为c_write
的一部分。
相关文章:
- 为什么g++在未执行的代码处标记强制转换错误
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 执行具有转换错误的过程
- 是什么将程序集转换为实际可执行的材料
- 显式构造函数仍在执行转换
- 需要帮助转换以执行循环
- 如何对字符串作为指针执行大写转换
- 代码问题将字符串转换为图表执行
- 未执行lvalue到rvalue转换
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- 模板化构造函数无法执行转换
- C++ 仅当模板为字符串类型时执行小写转换
- 通过引用派生类对象从基类对象执行向下转换时引发bad_cast异常
- 将lambdas转换为std ::函数时,执行const-correctness
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID
- varargs宏以执行函数调用或将其转换为字符串
- 在转换为较小的数值类型之前执行范围检查的安全、跨平台方法是什么
- 防止在执行时将两个类中的两个对象转换为 bool:if(a!=b)
- 如何将可执行文件转换为 C++ 文件以达到代码峰值