我如何解决这个问题我用我的小写函数

问题描述 投票:0回答:1

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

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

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

c pointers lowercase
1个回答
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,否则你会有内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.