如何在for循环中改变char*中的字符
c++ How to change a character in char* in for loop
嘿,伙计们,我有一个作业,我似乎无法解决。我得到一个char*字符串,我需要使用位操作将所有大写字母(一切都是ASCII)转换为小写字母。我正在添加我的代码,但它总是崩溃。
#include <iostream>
#include <cstring>
using namespace std;
void convertToLower(char* string)
{
for (unsigned int i = 0; i < strlen(string); i++)
{
if (string[i] >= 65 && string[i] <= 90)
{
string[i] |= 32;
}
}
cout << string << endl;
}
int main()
{
convertToLower("Hello");
return 0;
}
你试图修改字符串字面量,即只读内存:这就是你崩溃的原因(或未定义的行为更准确)
void convertToLower(char* str)
{
for (unsigned int i = 0; i < strlen(str); i++)
{
if (str[i] >= 65 && str[i] <= 90)
{
str[i] |= 32;
}
}
cout << str << endl;
}
int main() {
char arr[] = "STRING";
convertToLower(arr); // Fine
char *readonly = "READONLY";
convertToLower(readonly); // Nope
}
我想最近的编译器也应该警告你这个(Wwritable-strings
)。
在这里阅读更多关于这个问题的信息:为什么字符串字面量是const?
convertToLower("Hello");
"Hello"
为const char[]
型。自c++ 11以来,从const char*
到char*
的转换是非法的,所以如果你使用的是现代版本,编译器应该告诉你一些事情,至少是一个警告。不能覆盖只读内存(const
)。尝试这样做会导致未定义的行为。复制它并传入:
char copy[] = "Hello";
convertToLower(copy);
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 使用动态分配将 char* 复制到另一个字符**
- 为什么strlen(s)与s的大小不同,为什么cout-char显示的是字符而不是数字
- 打印标准::<char>不带无关字符的矢量
- 为什么char不是单个字符
- C++ char 类查找字符索引
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 当对字符变量使用toupper()时,所述char变量输出多个字符.我该如何防止这种情况发生
- 第 5 行:字符 54:错误:调用"min(int,std::__cxx11::basic_string<char>::size_type)"没有匹配函数
- 将char类型指定给int以打印相应的ASCII字符
- 将字符串文本分配给字符*:const_cast<字符 *> 与使用 char 数组
- 如何稳定地将字符*转换为TAO::String_Manager_T<char>
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- T = char* 的"常量 T"不是"常量字符*"?
- 为什么 fstream.read 和 fstream.write 使用 char 而不是无符号字符?