Printf无法使用返回的字符串指针正确打印

时间:2019-06-26 23:04:45

标签: pointers printf

我在这里完全不知所措。我正在尝试学习C并编写了一个函数,该函数接受字符串,将所有大写字母都转换为小写,然后将其复制到数组中,然后返回指向该字符串的指针。

通过所有措施,该代码有效。如果我使用printf从原始函数(下面的tolowercase函数)内部打印字符串,则可以正确打印。如果我遍历返回的数组指针并单独打印每个字符,它将起作用(在main方法中查看)。我检查了返回的数组中是否存在空字符,并且它还是(再次在main方法中)。

但是,尽管如此,当我尝试从main方法打印字符串时,就像它只会打印最多一定数量的字符,然后,对于其余字符,它会给出毫无意义的垃圾字符。它们不是我遍历指针时看到的字符。

这是代码。我已经在代码中留下了代码,您可以看到我遍历了返回的指针并获得了我应有的一切:

#include <stdio.h>

int stringlen(char *p);
char *tolowercase(char *p);

int main() {
    char *p;
    p = tolowercase("HELLO THERE I AM REALLY CON");
    for (int i = 0; i < len; i++) {
        printf("%c", *(p+i));
    }
    for (int i = 0; i <= len; i++) {
        printf("%c", *(p+i));
        if (*(p+i) == '\0')
            printf("good");
    }
    printf("\n");
    printf("%s\n", p);
    return 0;
}

int stringlen(char *p) {
    int count = 0;
    while (*(p++) != '\0') {
        count++;
    }
    return count;
}

char *tolowercase(char *p) {
    int len;
    char lower[(len = (stringlen(p) + 1))], *s;
    char *r;
    printf("%d\n", len);
    s = lower;
    r = lower;
    while (*p) {
        if ((*p < 'a') && (*p != ' ')) {
            *s = (*p) + 32;
        } else {
            *s = (*p);
        }
        printf("%c %c ", *p, *s);
        p++, s++;
    }
    *s = '\0';
    printf("%s\n", r);
    return r;
}

这是main方法中的最后一个printf语句,该语句使我很乱。如前所述,它似乎与字符串中的字符数有关。有一次,它似乎不喜欢超过15个字符。现在,大约有26个字符。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您将返回一个指向本地数组(指针lower,数组{{1}})开始的指针。函数返回后,该数组将消失