我有一个简单的函数,它将一个字符数组作为参数,并将所有字符转换为小写。但是,我得到一个奇怪的访问冲突错误。这是代码:
void toLower(char *rec)
{
int i=0;
while (rec[i]!='\0')
{
if (rec[i]>='A' && rec[i]<='Z')
rec[i]='a'+rec[i]-'A'; //this is where I get an error - assigning the
//the value to rec[i] is the problem
i++;
}
}
你能告诉我我的错误是什么吗?
感谢
答案 0 :(得分:6)
你工作太辛苦了:))
#include <algorithm> //For std::transform
#include <cctype> //For std::tolower
#include <cstring> //For std::strlen
void toLower(char *rec)
{
std::transform(rec, rec + std::strlen(rec), rec, std::tolower);
}
答案 1 :(得分:6)
你是否传入(甚至间接)一个字符串文字?如果是这样,那么它可能被加载到不可写的内存中;你需要对副本进行更改。
你的函数原型需要char *
而不是const char *
表明你可能没有这样做,但我想我会抛出它。
答案 2 :(得分:6)
在评论中,您说您将文字字符串传递给函数,如下所示:
palindrome("In girum imus nocte et consumimur igni")
其中palindrome
将其参数传递给toLower
。这不起作用,因为字符串文字是只读的,并且您正在尝试修改它。相反,您可以使用:
char str[] = "In girum imus nocte et consumimur igni";
palindrome(str);
或者您可以让palindrome
将其参数复制到数组中并在其上调用toLower
。
答案 3 :(得分:1)
听起来你没有传入有效的缓冲区。但不要自己写;使用像strlwr这样的东西。