在C中将字符串转换为大写字母和零

时间:2016-02-20 16:09:36

标签: c arrays string

我正在尝试创建一个接受字符串的函数,并将所有小写字母转换为大写,其他所有字母转换为零,然后打印字符串。这就是我所拥有的:

void upperAndZeros(char* toUpper) {
    char *toReturn[(sizeof(toUpper) / sizeof(*toUpper)) + 1];
    int i;
    for (i = 0; toUpper[i] != '\0'; i++) {
        if (toUpper[i] >= 'a' && toUpper[i] <= 'z') {
            toReturn[i] = (char) toupper(toUpper[i]); //this is line 127 in the code
        } else {
            toReturn[i] = (char) 0;
        }
    }
    toReturn[i] = '\0';
    printf("The modified string is '%s'", toReturn);
}

但是当我去编译这个时,我得到以下错误:

127:25 warning: assignment makes pointer from integer without a cast

2 个答案:

答案 0 :(得分:3)

您收到的错误是因为您在char数组中尝试char *

toReturn[i] = (char) toupper(toUpper[i]);

您想要一个char而不是char *的数组。改变这一行

char *toReturn[(sizeof(toUpper) / sizeof(*toUpper)) + 1];

char toReturn[(sizeof(toUpper) / sizeof(*toUpper)) + 1];

你应该做的另一个改变,在评论中建议,sizeof()在这里不起作用,因为数组在传递给函数时会衰减成指针。 sizeof(toUpper)将返回指针的大小。阅读this以了解问题。

如果strlen()指向的字符串已终止NUL,请在此处使用toUpper

如果没有,则将长度单独发送给该函数作为另一个参数。

答案 1 :(得分:0)

很多问题,这样的事情会更好:

void upperAndZeros(char* toUpper) {
    char toReturn[strlen(toUpper) + 1];
    int i;
    for (i = 0; toUpper[i] != '\0'; i++) {
        if (islower(toUpper[i])) {
            toReturn[i] = (char) toupper(toUpper[i]);
        } else {
            toReturn[i] = '0'; // beware not 0 but char '0'
        }
    }
    toReturn[i] = '\0';
    printf("The modified string is '%s'", toReturn);
}
相关问题