什么是分段故障(核心转储)?

时间:2013-10-28 17:46:24

标签: c

我正在尝试在linux中编写一个具有sqrt参数的C程序,这是代码:

#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&gt;”提示符下输入输入后,gcc给出了以下错误:

Segmentation fault (core dumped)

1 个答案:

答案 0 :(得分:108)

“分段错误”表示您尝试访问无权访问的内存。

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

此外,由于您传递了floatprintf(顺便说一下,在转到double时转换为printf)应该使用%f格式说明符。 %s格式说明符用于字符串('\0' - 终止的字符数组)。