c++如何在for循环中更改char *中的字符

标签 c++ char

嘿伙计们,我有一个任务,我似乎无法解决。我得到一个 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)。

在此处阅读有关此问题的更多信息:Why are string literals const?

关于c++如何在for循环中更改char *中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40658139/

相关文章:

c++ - 动态内存分配并接受输入

c++ - 如何用 g++ 向量化我的循环?

c++ - 将单个参数传递给多参数函数

javascript - 如何比较存储在数组中的单独字符串值的字符? JavaScript

c - 尝试释放内存时出错

c++ - ICU:ucnv_convertEx——即时检测编码错误

c++ - 如何使用 NtCreateMutant(Zw) 在 C++ 中创建互斥量

c++ - 将缓冲区写入文件(存储 1585 字节而不是 1580)

C 用另一个替换字符数组中的一个字符

java - char 数组中出现的次数