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