我有一个接收const char*
的函数,我想将它转换为小写。但是我得到了错误:
error: array initializer must be an initializer list or string literal
我试图将字符串变量复制到另一个数组,以便我可以小写它。但我觉得我有些困惑。
这是我的功能:
int convert(const char* string)
{
char temp[] = string;
temp = tolower(temp); //error is here
//do stuff
}
我很难理解这个错误意味着什么,有人可以帮忙解释一下吗?
答案 0 :(得分:4)
tolower
接受一个字符并以小写形式返回。
即使没有,数组也不可分配。数组和指针不是一回事。
你可能想做类似的事情:
char *temp = strdup(string); // make a copy
// adjust copy to lowercase
unsigned char *tptr = (unsigned char *)temp;
while(*tptr) {
*tptr = tolower(*tptr);
tptr++;
}
// do things
// release copy
free(temp);
确保您了解堆和堆栈之间的区别以及影响字符串文字的规则。
答案 1 :(得分:0)
请注意,tolower()接受一个字符而不是字符串:
int tolower ( int c );
此外,您正尝试将字符串从string
复制到temp[]
变量。 C中的=
运算符没有重载,无法将字符串复制到char
数组中。
现在关于你的错误:
错误:数组初始值设定项必须是初始化列表或字符串文字
它表示必须通过初始单个项目列表初始化数组,或者您可以直接指定字符串文字。
E.g:
char temp [] =“嗨”;
char temp [] = {'H','i','\ 0'};
另外,请检查您的陈述:
temp = tolower(temp);
此处tolower()
的返回类型为int
,您将其分配给数组temp
,这是不合适的。
您可以使用 strlwr()来使用以下代码段:
int convert(const char* string)
{
char *temp= malloc(strlen(string)+1);
strcpy(temp,string);
strlwr(temp);
//do your stuff
}
答案 2 :(得分:0)
首先,tolower
需要char
或int
,而不是字符串。
但即使您通过char
,您的代码也无法正常工作,因为此错误array initializer must be an initializer list or string literal
,意味着您必须使用以下方法之一对其进行初始化:
char arr[4] = {'h', 'e', 'y','\0'}; // initializer list
char arr[4] = "hey"; // string literal
char arr[] = "hey"; // also a string literal
char arr[4];
arr[0] = 'h';
arr[1] = 'e';
arr[2] = 'y';
arr[4] = '\0';