修改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
指针。
你没有说明你的目标,所以当你问"我应该如何实现这样的功能"时,你并不清楚你想做什么。但你可以对字符串进行复制以获得你自己的字符串,然后随意修改:
// 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");
相关文章:
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何修改 lambda 内部字符串的向量
- 修改向量中的字符串?(不使用循环)
- 如何在不进行任何其他修改的情况下"pretty print" C++的XML字符串?
- 如何找到修改后的字符串与原始字符串相等的时间
- 根据平台目标修改OriginalFilename字符串
- 在C++中修改字符串的BigO时间复杂度是多少
- 修改字符串数组中的字符串
- 在 c++ 中,std::string::size() 不计算修改后的字符串长度
- 从字符串修改char数组
- C++,字符* 字符串修改
- 是否可以修改字符串输入?
- 如何从线程修改字符串
- c++ 修改字符串以包含整数的字符串 repr.
- 在 c++ 中修改字符串向量的元素
- 使用指针修改 C++ 初学者---字符串
- Strtok似乎没有修改输入字符串
- 修改 gettext .pot 文件输出以排除空字符串或仅包含空格的字符串
- 错误:表达式必须是可使用字符串修改的左值
- c++宏中的字符串修改