什么是分段错误(核心转储)?

我正在尝试在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>”提示符下input我的input后,gcc给了我下面的错误:

 Segmentation fault (core dumped) 

“分段错误”意味着您尝试访问您无权访问的内存。

第一个问题是你的main论点。 main函数应该是int main(int argc, char *argv[]) ,并且在访问argv[1]之前应该检查argc是否至less为2。

另外,因为你将一个float传递给printf (顺便说一句,在传递给printf时候将其转换为double ),你应该使用%f格式说明符。 %s格式说明符用于string( '\0'终止字符数组)。