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

我想在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)
解决办法

"分割故障"意味着你试图访问你没有权限的内存。

第一个问题是你的 "main "的参数。main函数应该是int main(int argc, char *argv[]),在访问argv[1]之前,你应该检查argc至少是2。

另外,由于你向printf传递的是float(顺便说一下,当传递给printf时,它被转换为double),你应该使用%f格式指定器。%s格式指定器用于字符串('\0'结尾的字符数组)。

评论(3)