修改 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");
我正在尝试实现 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");