Я в полной растерянности.Я пытаюсь изучить C и написал функцию, которая принимает строку, копирует ее в массив, превращая все заглавные буквы в строчные, а затем возвращает указатель на строку.
По всем параметрам код работает.Если я использую printf для печати строки из исходной функции (функция tolowercase ниже), она печатается правильно.Если я перебираю возвращенный указатель массива и печатаю каждый символ индивидуально, это работает (посмотрите в методе 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;
}
Это последний оператор printf в методе main, который дает мне бред.Как уже упоминалось, это, похоже, связано с количеством символов в строке.В какой-то момент, похоже, ничего более 15 символов не нравилось.Теперь это около 26 символов.
Может кто-нибудь помочь мне, пожалуйста?