我在这里完全不知所措。我正在尝试学习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个字符。
有人可以帮我吗?
答案 0 :(得分:0)
您将返回一个指向本地数组(指针lower
,数组{{1}})开始的指针。函数返回后,该数组将消失。