C toLowerCase函数不起作用 - 访问冲突

时间:2010-04-14 14:08:19

标签: c access-violation lowercase

我有一个简单的函数,它将一个字符数组作为参数,并将所有字符转换为小写。但是,我得到一个奇怪的访问冲突错误。这是代码:

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++;
 }
}
你能告诉我我的错误是什么吗? 感谢

4 个答案:

答案 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这样的东西。