我有一个字符串数组,我正在尝试将所有字符转换为小写字母。
void make_lower(char **array)
{
int i = 0;
while (array[i] != NULL){
array[i] = tolower(array[i]);
i++;
}
}
我知道tolower函数一次读取一个字符,而不是一次读取整个字符串。这就是为什么我认为我必须使用这样的循环,但仍然会收到警告并且该功能不起作用:
passing argument 1 of ‘tolower’ makes integer from pointer without
a cast [-Werror]
note: expected ‘int’ but argument is of type ‘char *’
assignment makes pointer from integer without a cast [-Werror]
我真的很感谢你的帮助。
答案 0 :(得分:4)
你需要一对嵌套循环,一个用于字符串,一个用于其中的字符。
#include <stdio.h>
#include <ctype.h>
void make_lower(char **array)
{
int i = 0, j;
while (array[i] != NULL){
j = 0;
while (array[i][j] != '\0') {
array[i][j] = tolower(array[i][j]);
j++;
}
i++;
}
}
int main(void) {
char s1[]="ONE", s2[]="tWo", s3[]="thREE";
char *array[] = {s1, s2, s3, NULL };
make_lower(array);
printf ("%s\n", array[0]);
printf ("%s\n", array[1]);
printf ("%s\n", array[2]);
return 0;
}
计划外出:
one
two
three