什么是分段故障(内核转储)?
我想在linux中写一个C程序,有sqrt的参数,这里是代码。
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(char *argv[]){
float k;
printf("this is consumer\n");
k=(float)sqrt(atoi(argv[1]));
printf("%s\n",k);
return 0;
}
我在"shell>"提示下输入了我的输入,gcc给了我以下错误。
Segmentation fault (core dumped)
88
1
"分割故障"意味着你试图访问你没有权限的内存。
第一个问题是你的 "main "的参数。
main
函数应该是int main(int argc, char *argv[])
,在访问argv[1]
之前,你应该检查argc
至少是2。另外,由于你向
printf
传递的是float
(顺便说一下,当传递给printf
时,它被转换为double
),你应该使用%f
格式指定器。%s
格式指定器用于字符串('\0'
结尾的字符数组)。