修改c字符串[重复]
Posted
技术标签:
【中文标题】修改c字符串[重复]【英文标题】:Modifying a c string [duplicate] 【发布时间】:2015-03-22 15:02:28 【问题描述】:我正在尝试实现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;
如果这是真的,我应该如何实现这样的功能?
【问题讨论】:
【参考方案1】:是的,这是真的。您不能修改字符串文字。事实上,如果你的编译器不是 1922 年的,它甚至会阻止你首先获得指向字符串文字的非const
指针。
你没有说明你的目标,所以当你问“我应该如何实现这样的功能”时,你并不清楚你想做什么。但是您可以制作字符串文字的 copy 以获取您自己的字符串,然后随意修改:
// 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");
【讨论】:
我将字符串文字设为非常量,所以我想我可以修改它。那么您是否声称一个函数不能采用char*
并根据需要修改每个字符?
@Pilpel:如果 char*
指向字符串文字,那么,不,它不能。正如我在回答中明确指出的那样。 字符串文字不能修改。哎呀,你自己在你的问题中说过!
我明白了。所以我想我应该坚持使用 std 字符串,尽管我在使用它们时总是有这种烦人的感觉,因为(在我看来)它们似乎占用更多空间并使我的应用程序比使用 c 字符串更慢。
@Pilpel:这是错误的(模动态分配)!不过,我理解直觉。 “物体”总是感觉更重,即使它们不是。以上是关于修改c字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章