3

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

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

4 回答 4

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);
}
于 2010-04-14T14:10:59.363 回答
6

您是否传入(甚至间接)字符串文字?如果是这样,那么它可能会被加载到不可写的内存中;您需要对副本进行更改。

您的函数原型采用 achar *而不是 aconst char *表明您可能没有这样做,但我想我会把它扔掉。

于 2010-04-14T14:16:24.663 回答
6

在评论中,您说您将文字字符串传递给函数,如下所示:

palindrome("In girum imus nocte et consumimur igni")

wherepalindrome将其参数传递给toLower. 这不起作用,因为字符串文字是只读的并且您正在尝试修改它。相反,您可以使用:

char str[] = "In girum imus nocte et consumimur igni";
palindrome(str);

或者你可以palindrome将它的参数复制到一个数组中并调用toLower它。

于 2010-04-14T14:32:54.307 回答
1

听起来您没有传入有效的缓冲区。但是不要自己写这个;使用类似strlwr的东西。

于 2010-04-14T14:12:23.673 回答