我正在尝试创建一个通过链表的函数,并找到包含用户输入的子字符串的所有字符串。
问题在于它区分大小写,我需要不要区分大小写。 我的想法是在浏览列表时将所有内容都小写。并写了一些应该起作用的东西...我想...但是没有
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
答案 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
,否则会发生内存泄漏。