代码触发Segmentation Fault (core dumped),咨询是否存在语法问题
代码触发Segmentation Fault的原因及修复方案
你的代码触发段错误主要有几个核心问题:
- 参数类型完全不匹配:
checksub函数的参数定义为char strng(单个字符),但你传入的"twoi"是字符串字面量,在C语言里它的类型是const char*(指向字符串首地址的指针)。把指针赋值给单个char变量时,只会保留指针的一个字节(其余字节丢失),导致调用strlen时传入的是一个无效的内存地址,直接触发段错误。 - 缺少必要头文件:使用
strlen函数必须包含<string.h>头文件,否则编译器会对该函数进行隐式声明,可能引发未定义行为。 - 函数未返回值:
checksub声明为返回int类型,但函数体内没有return语句,违反C语言标准,同样会导致未定义行为。
修复后的代码如下:
#include <stdio.h> #include <string.h> int checksub(const char* strng){ int a = strlen(strng); printf("%d\n", a); return a; } int main(){ checksub("twoi"); return 0; }
内容的提问来源于stack exchange,提问作者Light
相关产品推荐
相关产品推荐

