修改c字符串

Modifying a c string

本文关键字:字符串 修改      更新时间:2023-10-16

我正在尝试实现tolower(char *)函数,但遇到访问冲突错误。我知道这是因为编译器将字符串文字存储在只读内存中。这是真的吗?这里有一些代码:

char* strToLower(char *str)
{
    if(str == nullptr)
        return nullptr;
    size_t len = strlen(str);
    if(len <= 0)
        return nullptr;
    for(size_t i = 0; i < len; i++)
        *(str+i) = (char)tolower(*(str+i));//access violation error
    return str;
}
int main()
{
    char *str = "ThIs Is A StRiNgGGG";
    cout << strToLower(str) << endl;
    system("pause");
    return 0;
}

如果这是真的,我该如何实现这样的功能?

是的,这是真的。不能修改字符串文字。事实上,如果你的编译器不是1922年的,它甚至会阻止你从一开始就获得一个指向字符串文字的非const指针。

你没有说明你的目标,所以当你问"我应该如何实现这样的功能"时,你并不清楚你想做什么。但你可以对字符串进行复制以获得你自己的字符串,然后随意修改:

// Initialises an array that belongs to you, by copying from a string literal
char str[] = "ThIs Is A StRiNgGGG";
// Obtains a pointer to a string literal; you may not modify the data it points to
const char* str = "ThIs Is A StRiNgGGG";
// Ancient syntax; not even legal any more, because it leads to bugs like yours
char* str = "ThIs Is A StRiNgGGG";

当然,由于这是C++,您不应该首先使用C字符串:

std::string str("ThIs Is A StRiNgGGG");