结构体变量与const char*参数类型不兼容问题及strcmp参数适配与结构体指针解引用技术咨询
解决strcmp参数类型不兼容的问题
你遇到的问题很明确:strcmp函数要求两个参数都是const char*类型的字符串指针,但你现在传给它的第二个参数是整个struct variable结构体实例,类型不匹配自然会触发报错。
问题根源
pstate->variablelist是struct variable类型的数组,pstate->variablelist[i]表示数组中第i个完整的结构体对象,而不是你需要的变量名字符串。你的struct variable定义里有name成员,这才是用来和传入的name进行比较的目标字符串。
修复代码
只需要把strcmp的第二个参数改成访问结构体的name成员即可:
void parseargument(struct cpu_state *pstate, char name[], struct variable** ppvar){ if (name[0]>='0' && name[0]<='9') { // 这里修正了原代码的小错误:把数字9改成字符'9' //literal //(*ppvar)->type= //(*ppvar)->values= } // variable for (int i=0;i<pstate->variablelistnumber;i++){ // 访问结构体的name成员,得到字符串指针 if (strcmp(name, pstate->variablelist[i].name)==0){ *ppvar=&pstate->variablelist[i]; return; } } }
额外小提示
原代码里的name[0]>='0' && name[0]<=9存在逻辑错误:9是整数字面量,而name[0]是字符类型,应该用字符'9'来比较,否则实际是在和ASCII码为9的制表符做对比,会导致判断逻辑失效,上面的修复代码已经帮你修正了这个问题。
内容的提问来源于stack exchange,提问作者user16836597
相关产品推荐
相关产品推荐

