C shell开发报错:char传递给char**参数出现类型转换不兼容
问题原因分析
- 你定义的
store_history函数要求接收的参数是char *类型(即字符串指针,指向整行输入内容的首地址) - 你调用时写的
store_history(*line)存在类型错误:line本身已经是char *类型,加*解引用后会得到char类型(也就是输入字符串第一个字符的ASCII值,属于整数类型),和函数要求的指针类型完全不匹配,因此触发类型转换报错。
解决方法
直接修改lsh_loop函数中调用store_history的代码,去掉多余的解引用符号即可:
// 替换掉原有的 store_history(*line); store_history(line);
可选优化提示
- 你当前的
store_history实现中,滚动覆盖旧历史记录时没有释放旧字符串的内存,会产生内存泄漏,如果需要优化可以在覆盖对应位置的历史记录前,调用free释放该位置存储的旧字符串 - 全局变量
cmdcount和history_count作用完全重复,都是统计已存储的历史命令数量,可以合并为一个变量减少冗余
内容的提问来源于stack exchange,提问作者dismal-audience
相关产品推荐
相关产品推荐

