Как я могу решить эту проблему с моей строчной функцией - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать функцию, которая просматривает связанный список и находит все строки, содержащие подстроку, которую вводит пользователь.

Проблема в том, что он чувствителен к регистру, и мне нужно, чтобы этого не было. Моя идея состояла в том, чтобы сделать все строчными, проходя список. И написал что-то, что должно работать ... Я думаю ... но не

char *lowerCase(char* strToLower){
    char *lowCase;
    strcpy(lowCase, strToLower);
    for(int i = 0; lowCase[i]; i++){
       lowCase[i] = tolower(lowCase[i]);
    }
    return lowCase;
}
printf("%s", lowerCase("Name"));

Теперь в идеале должно появиться «имя», но вместо этого я ничего не получаю.

Я получаю Возвращенный процесс -1073741819 (0xC0000005), что, на мой взгляд, является ошибкой, связанной с указателями или памятью? Я действительно не знаю, потому что журнал сборки ничего мне не говорит.

Любая помощь приветствуется <3 </p>

1 Ответ

2 голосов
/ 09 апреля 2019

Проблема в том, что вы используете strcpy неправильно.Пожалуйста, обратитесь к странице справки: https://linux.die.net/man/3/strcpy

Вам необходимо фактически выделить буфер для скопированной строки.Прямо сейчас вы просто копируете его в произвольную ячейку памяти (так как lowCase не инициализируется).

Вам нужно сделать так:

char *lowerCase(char* strToLower){
    char *lowCase = (char *)malloc(strlen(strToLower) + 1); // +1 because of terminator
    strcpy(lowCase, strToLower);
    for(int i = 0; lowCase[i]; i++){
       lowCase[i] = tolower(lowCase[i]);
    }
    return lowCase;
}

и оно должно работать.Но будьте осторожны: поскольку lowCase был выделен, вам также необходимо free его после использования, в противном случае у вас утечка памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...