我该如何解决小写功能的问题

时间:2019-04-09 17:37:28

标签: c pointers lowercase

我正在尝试创建一个通过链表的函数,并找到包含用户输入的子字符串的所有字符串。

问题在于它区分大小写,我需要不要区分大小写。 我的想法是在浏览列表时将所有内容都小写。并写了一些应该起作用的东西...我想...但是没有

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"));

现在,理想情况下应该弹出的是“名称”,但我什么也没得到。

我得到Process返回-1073741819(0xC0000005),我认为这是与指针或内存有关的错误吗?我真的不知道,因为构建日志不会告诉我任何内容。

感谢任何帮助,<3

1 个答案:

答案 0 :(得分:2)

问题是您使用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,否则会发生内存泄漏。