为什么在 C++ 中出现“禁止将字符串常量转换为 'char*'”?

迭戈·戈麦斯

我正在尝试手动反转案例,我尝试了这个:

char* invertirCase(char* str){
    int size = 0;
    char* iterador = str;
    char* retorno = str;

    while (*iterador != '\0') {

        if (retorno[size] < 96) {
            retorno[size] = *iterador + 32;
        }
        else {
            retorno[size] = *iterador - 32;
        }
        iterador++;
        size++;
    }

    return retorno;
}

我试图找出错误在哪里,但我不明白,因为我对 C++ 语言还很陌生。

来自莫斯科的弗拉德

为什么在 C++ 中出现“禁止将字符串常量转换为 'char*'”?

错误消息意味着您正在尝试将字符串文字传递给函数。

C++ 中的字符串文字具有按值传递给函数的常量字符数组类型,它们被隐式转换为 type const char *任何更改字符串文字的尝试都会导致未定义的行为。

您可以将由字符串文字初始化的字符数组传递给函数,例如

char s[] = "Hello";
std::cout << invertirCase( s ) << '\n';

反过来,该功能可以通过以下方式定义

#include <cctype>

char * invertirCase( char *str )
{
    for ( char *p = str; *p; ++p )
    {
        unsigned char c = *p;

        if ( std::isalpha( c ) )
        {
            if ( std::islower( c ) )
            {
                *p = std::toupper( c );
            }
            else
            {
                *p = std::tolower( c );
            }
        }
    }

    return str;
}

要么

char * invertirCase( char *str )
{
    for ( char *p = str; *p; ++p )
    {
        unsigned char c = *p;

        if ( std::islower( c ) )
        {
            *p = std::toupper( c );
        }
        else if ( std::isupper( c ) )
        {
            *p = std::tolower( c );
        }
    }

    return str;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:ISO C++ 禁止将字符串常量转换为 'char*'

来自分类Dev

警告:ISO C ++禁止为静态`constexpr char *`数据成员将字符串常量转换为'char *'

来自分类Dev

PyArg_ParseTupleAndKeywords引发警告:ISO C ++禁止将字符串常量转换为'char *'[-Wwrite-strings]

来自分类Dev

具有构造函数的简单类会引发警告:ISO C ++禁止将字符串常量转换为'char *'

来自分类Dev

错误:ISO C ++禁止从字符串常量转换为char *

来自分类Dev

为什么从字符串常量到'char *'的转换在C中有效但在C ++中无效

来自分类Dev

为什么C ++中的字符串文字(char *)必须是常量?

来自分类Dev

为什么将C ++字符串转换为int?

来自分类Dev

C#:将字符串转换为由首次出现的char分隔的字典时出错

来自分类Dev

C++:无法将字符串转换为 char*?

来自分类Dev

C 将 char* 字符串转换为 int 数组

来自分类Dev

.NET / C#-将char []转换为字符串

来自分类Dev

C#静态将char转换为字符串

来自分类Dev

C ++:不建议将字符串常量转换为'LPSTR {aka char *}'[-Wwrite-strings]-警告。如何避免?

来自分类Dev

为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

来自分类Dev

将 C 向下转换从 unsigned int 转换为 unsigned char 时,为什么 movl 优于 movb

来自分类Dev

当将浮点数转换为char时,C ++为什么不显示缩小的转换错误?

来自分类Dev

如何在C中将char [n] [length + 1]强制转换为常量字符串数组?

来自分类Dev

C ++弃用了从字符串常量到'char *'的转换

来自分类Dev

为什么我可以将隐式整数转换为C中的char

来自分类Dev

为什么C不允许从char **到const char * const *的隐式转换(而C ++允许)?

来自分类Dev

为什么在动态分配字符串时string :: c_str()返回const char *?

来自分类Dev

通过char数组C#迭代时无法将字符串转换为char

来自分类Dev

将字符串拆分后的C char **转换为char []

来自分类Dev

为什么将字符串作为文件名而不是char *传递时出现错误?

来自分类Dev

(仅C)将特殊字符从字符串char转换为十六进制

来自分类Dev

关于从char数组转换为字符串的问题-C ++

来自分类Dev

在C ++中将char转换为字符串

来自分类Dev

从int转换为c字符串(const char *)失败

Related 相关文章

  1. 1

    错误:ISO C++ 禁止将字符串常量转换为 'char*'

  2. 2

    警告:ISO C ++禁止为静态`constexpr char *`数据成员将字符串常量转换为'char *'

  3. 3

    PyArg_ParseTupleAndKeywords引发警告:ISO C ++禁止将字符串常量转换为'char *'[-Wwrite-strings]

  4. 4

    具有构造函数的简单类会引发警告:ISO C ++禁止将字符串常量转换为'char *'

  5. 5

    错误:ISO C ++禁止从字符串常量转换为char *

  6. 6

    为什么从字符串常量到'char *'的转换在C中有效但在C ++中无效

  7. 7

    为什么C ++中的字符串文字(char *)必须是常量?

  8. 8

    为什么将C ++字符串转换为int?

  9. 9

    C#:将字符串转换为由首次出现的char分隔的字典时出错

  10. 10

    C++:无法将字符串转换为 char*?

  11. 11

    C 将 char* 字符串转换为 int 数组

  12. 12

    .NET / C#-将char []转换为字符串

  13. 13

    C#静态将char转换为字符串

  14. 14

    C ++:不建议将字符串常量转换为'LPSTR {aka char *}'[-Wwrite-strings]-警告。如何避免?

  15. 15

    为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

  16. 16

    将 C 向下转换从 unsigned int 转换为 unsigned char 时,为什么 movl 优于 movb

  17. 17

    当将浮点数转换为char时,C ++为什么不显示缩小的转换错误?

  18. 18

    如何在C中将char [n] [length + 1]强制转换为常量字符串数组?

  19. 19

    C ++弃用了从字符串常量到'char *'的转换

  20. 20

    为什么我可以将隐式整数转换为C中的char

  21. 21

    为什么C不允许从char **到const char * const *的隐式转换(而C ++允许)?

  22. 22

    为什么在动态分配字符串时string :: c_str()返回const char *?

  23. 23

    通过char数组C#迭代时无法将字符串转换为char

  24. 24

    将字符串拆分后的C char **转换为char []

  25. 25

    为什么将字符串作为文件名而不是char *传递时出现错误?

  26. 26

    (仅C)将特殊字符从字符串char转换为十六进制

  27. 27

    关于从char数组转换为字符串的问题-C ++

  28. 28

    在C ++中将char转换为字符串

  29. 29

    从int转换为c字符串(const char *)失败

热门标签

归档