传递字符串至bool函数时出现Segmentation fault (core dumped)错误排查
问题分析与修复
你的代码存在两个关键问题,直接导致了段错误:
1. printf调用错误
printf的第一个参数必须是格式字符串,你直接传递checksub("a","a")的返回值(bool类型在C中本质是int,true对应1),程序会把这个数值当作内存地址去读取格式字符串,而地址1属于非法内存区域,因此触发段错误。
正确用法需要指定格式符输出布尔值:
printf("%d\n", checksub("a","a")); // %d输出整数,true为1,false为0 // 或者更直观的文本输出: printf("%s\n", checksub("a","a") ? "true" : "false");
2. checksub函数缺少默认返回值
当*s1 != *v时,函数没有任何return语句,这属于未定义行为,函数会返回随机的垃圾值,可能引发后续逻辑异常。必须确保函数在所有分支都有明确的返回值:
bool checksub(char *s1, char *v) { if (*s1 == *v) { return true; } return false; // 补充分支的返回值 }
修复后的完整代码
#include <stdio.h> #include <stdbool.h> bool checksub(char *s1, char *v) { if (*s1 == *v) { return true; } return false; } int main(void) { printf("%s\n", checksub("a","a") ? "true" : "false"); return 0; }
内容的提问来源于stack exchange,提问作者Light
相关产品推荐
相关产品推荐

