修改 c 字符串

Modifying a c string

我正在尝试实现 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 指向字符串文字的指针。

你没有说明你的目标,所以当你问 "how am I supposed to implement such function" 时,你并不清楚你想做什么。但是您可以 复制 字符串文字以获得您自己的字符串,然后随意修改它:

// 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");